【问题标题】:Show Stack content (not stack call) at visual studio 2013在 Visual Studio 2013 上显示堆栈内容(不是堆栈调用)
【发布时间】:2014-04-24 17:39:13
【问题描述】:

我如何在 Visual Studio 2013 中查看堆栈内容(不是堆栈调用)?


查看 ESP 指向的位置和下方。在 char 处显示内容。

感谢您的帮助。

【问题讨论】:

标签: visual-studio visual-studio-2013


【解决方案1】:

您可以通过转到调试 > Windows > 寄存器来执行此操作,获取 ESP 的位置,然后在调试 > Windows > 内存窗口中输入此地址。但是,这只会给你原始内存。

正如 OwenWengerd 在 cmets 中指出的那样,如果您正在调试本机代码,则只需在地址字段中键入 ESP。出于某种原因,这不适用于托管代码。

【讨论】:

  • 不需要从寄存器窗口中获取 ESP 的值。只需在内存窗口的地址字段中输入 ESP,调试器就会解析其当前值。
  • @OwenWengerd 我试图找到这样的快捷方式,但找不到。当我在内存窗口的地址字段中键入 ESP 时,我得到“无法评估表达式”。确切的语法是什么?
  • @Brian 确切的语法是 ESP,然后 来评估它。您当时必须在调试本机代码,否则我不知道为什么它对您不起作用。
  • @OwenWengerd 啊,这解释了它。我在看托管代码。感谢您的更新。
【解决方案2】:

另一个答案对于 32 位代码是正确的,但是对于 64 位代码它只是“半正确”。

如果你真的想在esp看到内存,那么你可以在内存调试窗口的地址输入框中输入esp

但是,这可能不是您想要的 64 位代码。堆栈位于 rsp 而不是 esp

如果您在内存调试窗口的地址输入文本框中输入 rsp,您将看到堆栈内存。如果您在地址输入文本框中输入 esp,那么您将看到 (rsp & 0x00000000ffffffff) 处的内存,这可能不是您想要的。

【讨论】:

    【解决方案3】:

    您可以重新创建一些旧的 DOS 调试器,例如 Turbo Debug,并带有排列的内存窗格:

    1. 打开内存窗格。
    2. 在上下文菜单中,为 32 位堆栈(分别为 64-)选择 4 字节整数(分别为 8 字节)。
    3. 选择 1 列(或减小窗格的宽度以仅显示 1 列,无论哪种方式最适合您;您也可能希望在解决方案资源管理器下显示这个窄窗格,它几乎自然会有一列)
    4. 在地址栏中输入 esp (resp. rsp)。
    5. 点击刷新按钮,地址栏会重新评估每一步。

    如果在汇编级别进行调试并单步执行一些 PUSH 和 POP,您应该会看到内存窗格保持同步。

    注意:这是用 x86 或 amd64 架构编写的,这不是 VS 唯一支持的。如果您使用的是其他架构,请根据您的 CPU 自身的具体情况调整您阅读的内容,即打开寄存器窗格以查找您自己的堆栈指针寄存器名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2015-03-03
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-13
      • 2021-12-06
      相关资源
      最近更新 更多