Visual Studio内存窗口:检查引用而不是引用的值?

时间:2013-06-14 07:01:58

标签: visual-studio clr visual-studio-debugging internals

当我使用Visual Studio的 Memory 窗口检查字符串变量text时,我会看到它的值:

Example of the inspection of a <code>string</code> variable in Visual Studio's Memory window

出于好奇,有没有办法检查(在内存窗口中)该值引用的位置

(当然我已经可以看到内存位置的地址了。我问这个是因为我很好奇CLR如何表示和使用类类型实例。根据CLI规范所说的,我假设CLR至少将它们表示为指针,类型标记和值的组合。我看到后面的两个,但是希望看到指针,还有什么可能与它一起存储。)

1 个答案:

答案 0 :(得分:2)

一般来说,不只是一个位置,特别是因为这是一个实习字符串。但是你确实有一个,因为你知道 text 变量指向字符串。因此,使用address-of运算符获取引用的地址,在地址框中键入&text

您可能希望使其更易于识别,右键单击“内存”窗口并选择“8字节整数”。你会看到000000000256D08。您正在查看的内存区域是主线程的堆栈。

请注意这一点都是学术性的。这是有效的,因为您正在使用调试器并且禁用了抖动优化器。在优化程序中,该指针值将存储在cpu寄存器中。在测试方法的特定情况下,没有什么可看的,因为赋值语句将被优化掉。

您可以使用Release版本和工具+选项,调试,常规查看“真实”代码,取消选中“抑制JIT优化”选项。请注意,它使调试器变得愚蠢,它不再了解局部变量。最重要的调试窗口是Debug + Windows + Disassembly,以查看代码和Debug + Windows + Registers以查看CPU寄存器。右键单击后一个窗口并勾选SSE2,这样您就可以看到XMM寄存器,x64抖动就喜欢使用它们。