是否可以使用 Visual Studio 调试器的 Watch 窗口查看内存位置的值?

Posted

技术标签:

【中文标题】是否可以使用 Visual Studio 调试器的 Watch 窗口查看内存位置的值?【英文标题】:Is it possible to watch the value of a memory location using the Visual Studio Debugger's Watch window? 【发布时间】:2012-04-18 21:32:58 【问题描述】:

是的,我知道有四个内存窗口,但我更喜欢在监视窗口中显示单个值,我想知道是否可以在监视窗口中指定要监视的内存位置。

单独放置地址只会计算为十六进制地址。

【问题讨论】:

【参考方案1】:

如果你想观察一个特定的内存位置,那么你需要告诉调试器这个位置的对象的类型。而不仅仅是0x00aabbcc 使用(SomeType*)0x00aabbcc。一旦调试器知道内存位置的类型,它将把它当作一个类型化的本地并相应地显示值

【讨论】:

我希望 VS 不会尝试如此聪明,并要求知道数据类型以查看内存位置的内容。我宁愿它有点愚蠢,只是在内存位置显示一个十六进制转储:P 它已经有内存窗口了。只需将变量拖放到那里(或粘贴十六进制地址),它就会显示原始内存状态。【参考方案2】:

查看官方网站answer,它的工作原理与此问题的其他答案一样有效:)。 在该页面上,“通过内存跟踪指针”部分说:

在本机代码应用程序中,您可以将寄存器名称用作实时 表达式。例如,您可以使用堆栈指针跟随 堆栈。

跟随指针穿过内存

    内存 窗口 地址 框中,键入指针表达式。指针变量必须在当前范围内。 根据语言,您可能需要取消引用它。

    ENTER。现在,当你使用Step等执行命令时,显示的内存地址会随着指针的变化而自动变化。

【讨论】:

"在内存窗口地址框中,键入一个指针表达式。"究竟什么是指针表达式?我尝试的任何方法都不起作用。 指针表达式可能类似于:*(int*)(ebp+0ch)。它将 ebp+0ch 视为指向 int 的指针,然后取消引用它。

以上是关于是否可以使用 Visual Studio 调试器的 Watch 窗口查看内存位置的值?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用 Visual Studio 构建 WinDBG 扩展?

使用 Visual Studio 进行 Scrapy 调试

Visual Studio 调试器显示本机类型的错误值

用于调试 Borland 和 Visual Studio 应用程序的工具

是否可以知道在 Visual Studio 2013 中加载了多少个类型的对象

Visual Studio 2012 分析远程调试过程