在 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,然后另一个答案对于 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 安装