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

kqlmhetl  于 2023-11-21  发布在  其他
关注(0)|答案(1)|浏览(165)

我试图使用Visual Studio Professional 2017进行转储分析,但是当在监 windows 口中输入命令.natvisreload时,我得到syntax error,并且output window中没有任何内容。(这似乎意味着该命令不被理解)
为了让我了解真实的问题,我想知道另一个我可以在Watch window中启动的命令的例子:有人知道另一个命令吗,以一个点开始,我可以在Watch window中启动(为了区分这个问题是与特定的命令.natvisreload相关还是与一般的Watch window相关)?

osh3o9ms

osh3o9ms1#

“natvis”是“native visualiser”的缩写。由非托管调试引擎使用,以提供本机对象的自定义视图。.natvisreload命令是只有非托管调试引擎才能理解的命令。从注解中可以看出这是如何出错的:


的数据
当您使用File > Open > File为使用托管代码的进程打开小型转储时,您会看到slug的示例。请注意右上角用于启动调试的3个选项。“Managed Only”仅启用托管调试引擎,“Native Only”用于非托管引擎,“Mixed”启用两者。
您使用了“Mixed”。虽然这启用了两个引擎,但同时只能有一个处于活动状态。不幸的是,并不总是很明显哪个特定的引擎处于控制状态。除了调试器能够显示源代码之外。还有一个副作用,就像您在这里发现的那样,“.natvisreload”命令会变成“huh?”,因为托管调试引擎不理解该命令。
因此,一种解决方法是使用“仅限本机”。
但是,您可以在运行中在引擎之间切换。这通常会在调试器到达断点时自动发生。转储调试不是一个选项。另一种非直观的方法是使用Windows > Call Stack调试器窗口。在混合模式调试中,您可以在堆栈中看到托管和非托管堆栈帧,从底部的RtlUserThreadStart开始。双击其中一个帧,就像下面的一个,调试器切换引擎。请注意,你不一定有什么像样的东西看,特别是如果这是一个托管程序,你只是得到一个机器码转储本机代码。“.natvisreload”命令现在将按预期工作。

相关问题