我正在尝试使用 Visual Studio Professional 2017 进行转储分析,但是当在监视窗口中输入命令
.natvisreload
时,我得到 syntax error
并且 output window
中没有任何内容。 (这好像说明命令没看懂)
为了让我了解真正的问题,我想知道我可以在
Watch window
中启动的另一个命令的示例:有人知道另一个命令,以点开头,我可以在 中启动Watch window
(为了区分问题是与特定命令.natvisreload
有关还是与一般命令Watch window
有关)?
“natvis”是“native Visualiser”的缩写。由非托管调试引擎用来提供本机对象的自定义视图。
.natvisreload
命令是只有非托管调试引擎才能理解的命令。从评论中可以明显看出这是如何出错的:
使用“文件”>“打开”>“文件”打开使用托管代码的进程的小型转储时看到的 slug 示例。请注意右上角用于开始调试的 3 个选项。 “仅托管”仅启用托管调试引擎,“仅本机”用于非托管引擎,“混合”同时启用两者。
您使用了“混合”。虽然这会启用两个引擎,但同时只能有一个处于活动状态。不幸的是,并不总是很明显是哪一个特定的人在控制。除了能够显示源代码的调试器之外。就像您在这里发现的副作用一样,“.natvisreload”命令会变成“嗯?”因为这不是托管调试引擎理解的命令。
因此,一种解决方法是使用“仅限本机”。
但是,您可以在引擎之间即时切换。当调试器到达断点时,这通常会自动发生。不是转储调试的选项。另一种不直观的方法是使用“调试”>“窗口”>“调用堆栈”调试器窗口。在混合模式调试中,您可以在堆栈中看到托管和非托管堆栈帧,从底部的 RtlUserThreadStart 开始。双击这些框架之一(如底部的框架),调试器会切换引擎。请注意,您不一定有像样的东西可看,特别是如果这是一个托管程序,并且您仅获得本机代码的机器代码转储。然而,“.natvisreload”命令现在将按预期工作。