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

natvisreload using Visual Studio Professional 2017 : syntax error

我正在尝试使用 Visual Studio Professional 2017 进行转储分析,但是当在 watch-window 中输入命令 .natvisreload 时,我得到了 syntax error output window 中什么都没有。 (这好像是命令没看懂)

为了让我了解真正的问题,我想知道我可以在 Watch window 中启动的另一个命令的示例:有人知道另一个命令吗,以点开头,我可以在 Watch window 中启动(以区分问题是与特定命令有关 .natvisreload 还是与一般 Watch window 有关)?

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

当您使用“文件”>“打开”>“文件”为使用托管代码的进程打开小型转储时看到的 slug 示例。请注意右上角的 3 个选项以开始调试。 "Managed Only" 仅启用托管调试引擎,"Native Only" 用于非托管引擎,"Mixed" 启用两者。

您使用了 "Mixed"。虽然这会启用两个引擎,但同时只能有一个处于活动状态。不幸的是,控制权并不总是很明显。除了能够显示源代码的调试器。和您在这里发现的副作用一样,“.natvisreload”命令变为 "huh?",因为这不是托管调试引擎理解的命令。

因此,一种解决方法是使用 "Native Only"。

但是您可以在引擎之间切换 on-the-fly。当调试器到达断点时,这通常会自动发生。不是转储调试的选项。 non-intuitive 另一种方法是使用调试 > Windows > 调用堆栈调试器 window。在 mixed-mode 调试中,您会在堆栈中看到托管和非托管堆栈帧,从底部的 RtlUserThreadStart 开始。 Double-click 这些帧之一,如底部帧,调试器切换引擎。请注意,您不一定要看得体的东西,特别是如果这是一个托管程序,并且您只是获得本机代码的机器代码转储。但是,“.natvisreload”命令现在将按预期工作。