8

调试时可以查看堆和栈吗?

4

5 回答 5

10

AFAIK,您要使用的主要窗口是MSDN 具有的 Locals ( Ctrl+ Alt+ V, L) 和 Autos ( Ctrl+ Alt+ V, ) 窗口:L

  • Locals 窗口显示当前上下文或范围的局部变量。通常,这意味着您当前正在执行的过程或功能。调试器会自动填充此窗口。在 Visual C# 中,当异常助手被禁用时,Locals 窗口也会在出现活动异常时显示一个伪变量 $exception。您可以展开伪变量以查看异常的详细信息。
  • Autos 窗口显示在当前代码行和前一行代码中使用的变量。对于本机 C++,Autos 窗口也显示函数返回值。与 Locals 窗口一样,Autos 窗口由调试器自动填充。

  • ...对于堆栈,有调用堆栈窗口(调试 -> 窗口 -> 调用堆栈)或Ctl+ Alt+ C

    但是,我觉得这不是你想要的。

    如果您正在寻找“内存中”视图,您可以使用 Visual Studio 的内存窗口,该窗口可以从 Debug -> Windows -> Memory -> Memory x 菜单(其中 x 为 1-4)访问或Ctrl+ Alt+ M, 1-4。

    正如一些人现在提到的,还有一些其他外部工具对内存调试非常有用(我主要使用 SysInternals 工具和 Windows 调试工具)。

    于 2009-03-22T14:29:42.147 回答
    6

    您需要“调用堆栈窗口”... 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。

    于 2009-03-22T14:29:17.453 回答
    0

    您可以在调试时查看调用堆栈,但我认为这不是您想要的。您可能想尝试 Windbg 和 SOS,它们非常适合调试内存问题。学习曲线有点陡峭,但回报是巨大的。

    适用于 Windows 的 Microsoft 调试工具

    于 2009-03-22T14:22:37.813 回答
    0

    如果您出于某种原因确实想查看原始内存,您可以从“ Debug->Windows->Memory”打开“内存”调试窗口,并在编辑框中写入您要查看的地址。您还可以在编辑框中写入任何计算结果为地址的表达式,它会向您显示该地址,例如&variable

    这对于实际查看变量不是很有用,因为您将很难将原始字节解析为有意义的值,但它对于您怀疑存在缓冲区溢出或内存被意外覆盖的调试情况很有用。与data-breakpoints结合使用时特别有用。

    于 2009-03-22T15:48:35.673 回答
    0

    我知道这是一个老问题,但我想我还是会更新它......

    Visual Studio 2015 带有内置于诊断工具面板的内存使用监视器。如果您在要检查的内容之前、期间和之后拍摄快照,则可以追溯查看这些快照的堆视图。

    希望这可以帮助某人。

    于 2017-07-13T15:07:13.030 回答