在 Visual Studio 2013 上显示堆栈内容(不是堆栈调用)

Posted

技术标签:

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

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


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

感谢您的帮助。

【问题讨论】:

已经尝试过这个:***.com/questions/23020232/… 它不适合我。视觉上说它无法读取内存。如果存在,我会在 Visual Studio 中寻找内置的东西。 【参考方案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,并带有排列的内存窗格:

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

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

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

【讨论】:

以上是关于在 Visual Studio 2013 上显示堆栈内容(不是堆栈调用)的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2013 - Web 项目上的 JSLint.NET 安装不显示预期的 Jslint 菜单选项

Visual Studio 2013 的亮点比 Visual Assist X 强

显示徽标后未处理 Visual Studio 2013 安装

适用于 Visual Studio 2012/2013 的 MySQL

Visual Studio 参考突出显示不会禁用

代码编辑器 Visual Studio 2013 中缺少颜色