What is needed to write a custom native visualizer DLL in C++ for Visual Studio 2012 debugger? I want to display a value that can only be calculated from a class/struct on-demand hence a native visualizer DLL is required. Visual Studio 2012 uses a new method for implementing native visualizers called Natvis. As of this time, there is very little correct information on Natvis and especially on using Natvis to call a visualizer DLL. The DLL will calculate a display string based on class/struct member values.
Share
Here’s the C++ code that comprises the AddIn DLL. I named the file NatvisAddIn.cpp and the project created NatvisAddIn.dll.
Here is the .natvis file which Visual Studio 2012 debugger uses to display the value. Place it in a .natvis file. I named it NatvisAddIn.natvis. The file instructs VS 2012 debugger to call NatvisAddIn.dll. The dll contains two visualizer method calls; MyClassFormatter to format MyClass and MyStructFormatter to format MyStruct. The debugger will show the method’s formatted value in the Auto, Watch or tooltip display for each instance of the specified type (MyClass, MyStruct).
Place both the compiled NatvisAddIn.dll file and the NatvisAddIn.natvis files into one of the following three locations:
You will need to make sure the following registry key exists and the value is 1:
If all goes well, you will see natvis messages appear in Visual Studio’s debugger Output window. The messages will show whether Natvis was able to parse the .natvis files. Results of parsing every .natvis file is shown in the output window. If something is wrong, use the command “dumpbin/exports ” to double check that the DLL methods’ names are exactly matching the .navis file’s Type=. Also make sure the current .dll and .natvis files have been copied to the appropriate directory.
Test program:
Information resources: