Add natvis visualizers for json_document and json_view

nlohmann_json.natvis had no entries for the view and document types, so a
debugger showed the raw node index. Add visualizers for
basic_json_document<*,*>, basic_json_view<*,*> and detail::view::node.

A document is a flat index into the source text, so the strings of the
direct children can be read through document_data::base, while the
children of nested containers are shown as nodes (kind, size, numbers;
strings only by length). Containers with edits (node_flags::moved) are
not expanded. The types live in the same inline namespaces as basic_json
and view_mode is covered by a wildcard, so the ABI tags do not multiply
with it; the file grows from 862 KB to 1.7 MB.

Also correct the ABI tag count (11) in the --all size note.

Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
Niels Lohmann committed 2026-10-30 21:16:53 +01:00
1 parent 755bb16d7a
commit 43a2d24f6f
5 files changed
+11967 -3

No files matched your search

+8 -1
View File
@@ -10,6 +10,13 @@ at its root, a [Natvis](https://learn.microsoft.com/en-us/visualstudio/debugger/
file that gives `json`/`ordered_json` values a friendly, key/value debugger view instead of showing raw internal
fields, when debugging with the MSVC debug engine (`cppvsdbg`) in Visual Studio or VS Code.
The file also has visualizers for `json_document` and `json_view` (and their `ordered_json`/editable variants). They
show the value of the document or view, and its elements as an expandable list. Because a document is only a flat index
into the source text, the strings of the direct elements are shown, but the elements of nested arrays and objects are
shown as index nodes (their kind, size, and numbers; strings only by length). Arrays and objects that have been edited
in a `json_editable_document` are not expanded. The visualizers read the internal layout of the MSVC STL (`std::array`,
`std::unique_ptr`).
The checked-in visualizers cover namespace variants with zero, one, or two ABI tags. Configurations with three or more
ABI tags are not covered and may show raw internal fields instead. To generate a Natvis file for such a configuration:
@@ -29,7 +36,7 @@ ABI tags are not covered and may show raw internal fields instead. To generate a
4. Use the generated file instead of `nlohmann_json.natvis`.
`--abi-tags` can be repeated for several configurations, and `--all` generates every combination (about 60 MB for 12
`--abi-tags` can be repeated for several configurations, and `--all` generates every combination (about 60 MB for 11
ABI tags, doubling with each further tag). See
[`tools/generate_natvis`](https://github.com/nlohmann/json/tree/develop/tools/generate_natvis) for all options.