调试时可以查看堆和栈吗?
5 回答
AFAIK,您要使用的主要窗口是MSDN 具有的 Locals ( Ctrl+ Alt+ V, L) 和 Autos ( Ctrl+ Alt+ V, ) 窗口:L
...对于堆栈,有调用堆栈窗口(调试 -> 窗口 -> 调用堆栈)或Ctl+ Alt+ C。
但是,我觉得这不是你想要的。
如果您正在寻找“内存中”视图,您可以使用 Visual Studio 的内存窗口,该窗口可以从 Debug -> Windows -> Memory -> Memory x 菜单(其中 x 为 1-4)访问或Ctrl+ Alt+ M, 1-4。
正如一些人现在提到的,还有一些其他外部工具对内存调试非常有用(我主要使用 SysInternals 工具和 Windows 调试工具)。
您需要“调用堆栈窗口”... http://msdn.microsoft.com/en-us/library/a3694ts5.aspx
通过使用调用堆栈窗口,您可以查看当前在堆栈上的函数或过程调用。
对于堆,“内存窗口”... http://msdn.microsoft.com/en-us/library/s3aw423e(VS.80).aspx
内存窗口提供了应用程序使用的内存空间的视图。
“恢复隐藏的调试器命令”也可能有用... http://msdn.microsoft.com/en-us/library/9k643651(VS.80).aspx
当您进入调试内存时,其他调试器将更加有用。正如有人建议的那样,WinDbg 非常适合内存调试。我自己经常使用 IDA Pro Disassembler。
您可以在调试时查看调用堆栈,但我认为这不是您想要的。您可能想尝试 Windbg 和 SOS,它们非常适合调试内存问题。学习曲线有点陡峭,但回报是巨大的。
如果您出于某种原因确实想查看原始内存,您可以从“ Debug->Windows->Memory
”打开“内存”调试窗口,并在编辑框中写入您要查看的地址。您还可以在编辑框中写入任何计算结果为地址的表达式,它会向您显示该地址,例如&variable
这对于实际查看变量不是很有用,因为您将很难将原始字节解析为有意义的值,但它对于您怀疑存在缓冲区溢出或内存被意外覆盖的调试情况很有用。与data-breakpoints结合使用时特别有用。
我知道这是一个老问题,但我想我还是会更新它......
Visual Studio 2015 带有内置于诊断工具面板的内存使用监视器。如果您在要检查的内容之前、期间和之后拍摄快照,则可以追溯查看这些快照的堆视图。
希望这可以帮助某人。