使用Visual Studio Professional 2017的natvisreload:语法错误

Dom*_*que 1 dump crash-dumps visual-studio natvis visual-studio-2017

我正在尝试使用Visual Studio Professional 2017进行转储分析,但是当.natvisreload我在监视窗口中输入命令时,我得到了,syntax error并且中没有任何内容output window。(这似乎意味着不理解该命令)

为了使我能够跟踪真正的问题,我想知道一个我可以在中启动的另一个命令的示例Watch window:有人知道另一个以点开头的命令吗,我可以在中启动Watch window(以区别该问题是与特定命令有关.natvisreload还是与一般命令有关Watch window

Han*_*ant 5

“ natvis”是“ native visualizer”的缩写。由非托管调试引擎用来提供本机对象的自定义视图。该.natvisreload命令是只有非托管调试引擎才能理解的命令。从评论中可以明显看出这是怎么回事:

在此处输入图片说明

使用“文件”>“打开”>“文件”为使用托管代码的进程打开小型转储时看到的提示示例。请注意右上角的3个选项,以开始调试。“仅托管”仅启用托管调试引擎,“非本地”仅启用非托管引擎,“混合”则同时启用两者。

您使用了“混合”。虽然这可以启用两个引擎,但同时只能有一个活动引擎。不幸的是,哪一个特定的控制权并不总是很明显。除了调试器能够显示源代码。还有一个副作用,就像您在这里发现的那样,“。natvisreload”命令变为“嗯?” 因为这不是托管调试引擎可以理解的命令。

因此,一种解决方法是使用“仅本机”。

但是,您可以即时在引擎之间切换。当调试器到达断点时,这通常会自动发生。不是转储调试的选项。非直观的其他方法是使用“调试”>“ Windows”>“调用堆栈调试器”窗口。在混合模式调试中,您会在堆栈中看到托管和非托管堆栈帧,从底部的RtlUserThreadStart开始。双击这些框架之一(如底部的框架),调试器将切换引擎。请注意,您不一定要看得很体面,特别是如果这是一个托管程序,而您只会获得本机代码的机器代码转储。但是,“。natvisreload”命令现在将按预期工作。