1

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

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

4

1 回答 1

5

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

在此处输入图像描述

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

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

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

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

于 2018-04-10T08:31:44.990 回答