如何在Visual Studio 2013中显示堆栈内容(而不是调用堆栈)

11

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


查看 ESP 指向的位置及以下。显示 char 中的内容。

感谢帮助。


已经尝试过这个了: http://stackoverflow.com/questions/23020232/how-to-view-address-of-register-in-visual-studio-debugger 但对我来说不起作用。Visual Studio显示无法读取内存。 我正在寻找Visual Studio内置的功能,如果有的话。 - Tal
3个回答

15

您可以通过进入调试 > 窗口 > 寄存器,获取ESP的位置,然后在调试 > 窗口 > 内存窗口中输入该地址来实现此操作。但是,这只会给您提供原始内存。

正如OwenWengerd在评论中指出的那样,如果您正在调试本地代码,则可以在地址字段中简单地键入ESP。不过,由于某种原因,对于托管代码,这种方法并不起作用。


9
不必从“寄存器”窗口获取ESP的值。只需在“内存”窗口的地址栏中输入ESP,调试器将解析其当前值。 - Owen Wengerd
@OwenWengerd 我尝试寻找类似的快捷方式,但是找不到。当我在内存窗口的地址栏中输入ESP时,会出现“无法评估表达式”的提示。确切的语法是什么? - Brian Rasmussen
@Brian 精确的语法是ESP,然后按<Enter>以进行评估。您必须在调试本机代码时进行操作,否则我不知道为什么它对您无效。 - Owen Wengerd
@OwenWengerd 哦,这就解释了。我之前只看了托管代码。感谢您的更新。 - Brian Rasmussen

5
您可以像Turbo Debug这样的一些旧的DOS调试器一样重新创建一个排列好的内存窗格:
  1. 打开一个内存窗格。
  2. 在上下文菜单中,为32位堆栈(resp. 64-)选择4字节整数(resp. 8字节)。
  3. 选择1列(或缩小窗格宽度以只显示1列,无论哪种方式最适合您;还可以将此窄窗格显示在解决方案资源管理器下面,它几乎自然地只有一列)
  4. 在地址栏中输入esp (resp. rsp)。
  5. 点击刷新按钮,使地址栏在每个步骤上重新评估。

如果在汇编级别进行调试并通过一些PUSH和POP进行步进,则应看到内存窗格保持同步。

注意:此内容是针对x86或amd64架构编写的,但VS支持的不仅仅是这两种架构。如果您使用的是其他架构,请根据您的CPU的特定情况进行调整,即打开寄存器窗格以查找您自己的堆栈指针寄存器名称。


1
这应该是实际标记的答案。 - Lorenzo

3
另一个答案对于32位代码是正确的,但对于64位代码只有“半正确”。
如果您真的想看见esp处的内存,则可以在Memory调试窗口的Address文本框中输入esp
然而,这可能并不是您在64位代码中想要的结果。堆栈在rsp上而不是esp上。
如果您在Memory调试窗口的Address文本框中输入rsp,则会看到堆栈内存。如果您输入esp,则会看到(rsp&0x00000000ffffffff)处的内存,这很可能不是您想要的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接