我试图使用Visual Studio Professional 2017进行转储分析,但是当在监 windows 口中输入命令.natvisreload
时,我得到syntax error
,并且output window
中没有任何内容。(这似乎意味着该命令不被理解)
为了让我了解真实的问题,我想知道另一个我可以在Watch window
中启动的命令的例子:有人知道另一个命令吗,以一个点开始,我可以在Watch window
中启动(为了区分这个问题是与特定的命令.natvisreload
相关还是与一般的Watch window
相关)?
1条答案
按热度按时间osh3o9ms1#
“natvis”是“native visualiser”的缩写。由非托管调试引擎使用,以提供本机对象的自定义视图。
.natvisreload
命令是只有非托管调试引擎才能理解的命令。从注解中可以看出这是如何出错的:的数据
当您使用File > Open > File为使用托管代码的进程打开小型转储时,您会看到slug的示例。请注意右上角用于启动调试的3个选项。“Managed Only”仅启用托管调试引擎,“Native Only”用于非托管引擎,“Mixed”启用两者。
您使用了“Mixed”。虽然这启用了两个引擎,但同时只能有一个处于活动状态。不幸的是,并不总是很明显哪个特定的引擎处于控制状态。除了调试器能够显示源代码之外。还有一个副作用,就像您在这里发现的那样,“.natvisreload”命令会变成“huh?”,因为托管调试引擎不理解该命令。
因此,一种解决方法是使用“仅限本机”。
但是,您可以在运行中在引擎之间切换。这通常会在调试器到达断点时自动发生。转储调试不是一个选项。另一种非直观的方法是使用Windows > Call Stack调试器窗口。在混合模式调试中,您可以在堆栈中看到托管和非托管堆栈帧,从底部的RtlUserThreadStart开始。双击其中一个帧,就像下面的一个,调试器切换引擎。请注意,你不一定有什么像样的东西看,特别是如果这是一个托管程序,你只是得到一个机器码转储本机代码。“.natvisreload”命令现在将按预期工作。