Visual studio Visual Studio';s内存窗口:检查引用而不是引用值?

Visual studio Visual Studio';s内存窗口:检查引用而不是引用值?,visual-studio,clr,visual-studio-debugging,internals,Visual Studio,Clr,Visual Studio Debugging,Internals,当我使用Visual Studio的内存窗口检查字符串变量text时,我会看到它的值: 字符串Visual Studio内存窗口中的变量“> 出于好奇,是否有办法检查(也在内存窗口中)引用该值的位置 (当然,我已经可以看到内存位置的地址。我问这个问题是因为我很好奇CLR如何表示类类型实例,以及如何处理类类型实例。根据CLI规范的说明,我假设CLR至少将它们表示为指针、类型标记和值的组合。我看到了上面的后两个,but希望看到指针,以及随指针一起存储的其他内容。)通常情况下,并不是只有一个位置,特别

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

字符串Visual Studio内存窗口中的变量“>

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


(当然,我已经可以看到内存位置的地址。我问这个问题是因为我很好奇CLR如何表示类类型实例,以及如何处理类类型实例。根据CLI规范的说明,我假设CLR至少将它们表示为指针、类型标记和值的组合。我看到了上面的后两个,but希望看到指针,以及随指针一起存储的其他内容。)

通常情况下,并不是只有一个位置,特别是因为这是一个内部字符串。但您确实有一个位置,因为您知道文本变量指向该字符串。因此,请使用运算符的地址来获取引用的地址,在地址框中键入
&text

您可能想让它更易于识别,右键单击内存窗口并选择“8字节整数”。您将看到000000000 256D08。您正在查看的内存区域是主线程的堆栈

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


您可以通过发布版本和工具+选项、调试、常规、取消勾选“抑制JIT优化”来查看“真实”代码"选项。请注意,这会使调试器变得愚蠢,它不再了解很多局部变量。然后,最重要的调试窗口是Debug+windows+反汇编以查看代码,Debug+windows+寄存器以查看CPU寄存器。右键单击后一个窗口并勾选SSE2,以便可以查看XMM寄存器、x64寄存器等使用它们。

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

您可能想让它更易于识别,右键单击内存窗口并选择“8字节整数”。您将看到000000000 256D08。您正在查看的内存区域是主线程的堆栈

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


您可以通过发布版本和工具+选项、调试、常规、取消勾选“抑制JIT优化”来查看“真实”代码选项。请注意,这会使调试器变得愚蠢,它不再了解很多局部变量。然后,最重要的调试窗口是Debug+windows+反汇编以查看代码,Debug+windows+寄存器以查看CPU寄存器。右键单击后一个窗口并勾选SSE2,以便可以查看XMM寄存器、x64寄存器等使用它们。

&text
正是我想要的,但在地址框中键入此内容时,我会出现“无法计算表达式”错误。(顺便说一句,我已在该项目的设置中启用了
不安全的
代码。)知道可能是什么原因吗?不,我不知道可能是什么原因。对我来说一直都很有效,尝试修补Tools+options中的调试选项。
&text
正是我想要的,但在地址框中键入此项时,我会出现“无法计算表达式”错误。(我已经在该项目的设置中启用了
unsafe
code顺便说一句)你知道这可能是什么原因吗?不,我不知道是什么原因造成的。对我来说一直都很有效,请尝试修补Tools+options中的调试选项。