Visual Studio 调试器,无限制或不同类型地解释内存?
Visual Studio Debugger, interpreting memory without bound or as different types?
我希望通过学习如何更快、更清晰地检查值来改进我的调试工作流程,但我遇到了一个大问题。
Visual Studio 的 C++ 调试器对我的记忆做出了一些并不总是正确的假设:
值的“类型”可能不是我希望看到它的内存打印出来的方式
我可能想查看一个没有 0
终止 IDE 打印输出的 cstring
我想看的结构前面可能有内存
例如,我可能希望将 float value
视为 0x3f800000
而不是 1.0f
,因为将 0x0000803f
而不是 4.60060298822e-41
视为更容易看到自然存在字节序编码问题。
或者在标记化时,我想查看尽可能多的字符,不以 NULL 结束打印输出,甚至可能查看此地址的前面。
可以使用array, 23
在array
中打印出23个字符,但这是我能找到的唯一QoL特征,你必须为变量做一个书签, 所以它最终变得非常笨重。
是否有任何我错过的设置、扩展或功能可以提高我以 Visual Studio 可能无法为我预测的方式查看内存的能力?
这里问题较多,如有遗漏请见谅
对于类型,Visual Studio的Watch
window可以投。例如,如果您有
float f = 1.23;
您可以通过列出其名称将其视为浮动,或者您可以强制转换:
*(int*)&f 0x3f9d70a4 int
对于字符串(并寻找变量周围的内存),我建议使用 Memory
视图 (Debug -> Windows -> Memory
),您可以使用其中的四个视图同时查看不同的位置。或者在具有不同格式的相同位置。你可以把你的变量的地址放在那里和一些数学(- some value
)。您可以查看 1、2、4 或 8 字节值、十六进制或十进制、ANSI 或 Unicode 等。哦,是的 - 您可以滚动很远。
对于更复杂的类型,您可以使用natvis
我希望通过学习如何更快、更清晰地检查值来改进我的调试工作流程,但我遇到了一个大问题。
Visual Studio 的 C++ 调试器对我的记忆做出了一些并不总是正确的假设:
值的“类型”可能不是我希望看到它的内存打印出来的方式
我可能想查看一个没有
0
终止 IDE 打印输出的 cstring我想看的结构前面可能有内存
例如,我可能希望将 float value
视为 0x3f800000
而不是 1.0f
,因为将 0x0000803f
而不是 4.60060298822e-41
视为更容易看到自然存在字节序编码问题。
或者在标记化时,我想查看尽可能多的字符,不以 NULL 结束打印输出,甚至可能查看此地址的前面。
可以使用array, 23
在array
中打印出23个字符,但这是我能找到的唯一QoL特征,你必须为变量做一个书签, 所以它最终变得非常笨重。
是否有任何我错过的设置、扩展或功能可以提高我以 Visual Studio 可能无法为我预测的方式查看内存的能力?
这里问题较多,如有遗漏请见谅
对于类型,Visual Studio的Watch
window可以投。例如,如果您有
float f = 1.23;
您可以通过列出其名称将其视为浮动,或者您可以强制转换:
*(int*)&f 0x3f9d70a4 int
对于字符串(并寻找变量周围的内存),我建议使用 Memory
视图 (Debug -> Windows -> Memory
),您可以使用其中的四个视图同时查看不同的位置。或者在具有不同格式的相同位置。你可以把你的变量的地址放在那里和一些数学(- some value
)。您可以查看 1、2、4 或 8 字节值、十六进制或十进制、ANSI 或 Unicode 等。哦,是的 - 您可以滚动很远。
对于更复杂的类型,您可以使用natvis