【问题标题】:How to see values of member variables in WinDbg?WinDbg中如何查看成员变量的值?
【发布时间】:2018-10-25 07:10:18
【问题描述】:

命令x 从来没有真正对我有用。我可以做dv,它显示局部变量但不显示类的成员变量。我一直依靠 watch locals variables 窗口来查看这些值,但是如何通过x 命令查看它们?

例如,我在模块 Db!MyRecordSet::m_strQuery 中有一个变量,我如何查看 m_strQuery 的值?

我特别喜欢使用通配符来查看所有成员变量,如下所示:

x Db!MyRecordSet m_*

但它没有做任何事情或显示任何消息就返回了。它只是像什么都没发生一样返回。

【问题讨论】:

  • 有一个x 命令(= 检查符号),它永远不会起作用,或者我错过了它的语法!?我不知道如何访问/提及成员变量。它在一个模块中,而不是一个类及其该类的成员。
  • 它做了一些不同的事情:它正在寻找符号。找到后,使用dt(显示类型)。
  • @ThomasWeller 它确实找到了函数,但为什么它没有找到也是符号的成员变量
  • 我主要使用发布版本

标签: c++ debugging windbg


【解决方案1】:

如果我得到正确的 MASM 文档,带有两个冒号的语法对于符号应该是可以的:

使用两个冒号 (::) 或两个下划线 (__) 来表示一个类的成员

在发布版本中,您可能需要考虑编译器能够优化成员变量。

除此之外,x 命令只能显示符号本身并且不会将其映射到内存地址,因此我认为您正在寻找 dt (display type) 命令,带有

dt -r Db!MyRecordSet <address>

用于递归显示或扩展到给定的层次结构级别

dt Db!MyRecordSet... <address>

对于 3 级树。

示例,引用自 WinDbg 的文档(因为我手头没有示例):

0:000> dt nt!_PEB CriticalSectionTimeout.. 7ffdf000 
   +0x070 CriticalSectionTimeout   :  0xffffe86d`079b8000
      +0x000 LowPart                  : 0x79b8000
      +0x004 HighPart                 : -6035
      +0x000 u                        :
         +0x000 LowPart                  : 0x79b8000
         +0x004 HighPart                 : -6035
      +0x000 QuadPart                 : -25920000000000 

另一个选项可能是 C++ 评估

??@@c++(variable->member)

【讨论】:

  • x 并没有真正显示成员变量,通配符也不适用于dt。我知道应该,但不知道为什么不。
【解决方案2】:

https://blogs.msdn.microsoft.com/jigarme/2007/10/28/how-to-look-at-value-of-structure-object-who-is-member-of-class-object-while-debugging-in-windbg/

看看这个。

简单的命令是这样的: dt -b 模块名!类名 0xffffffff`xxxxxxxx 类成员

【讨论】:

  • 感谢发帖。下次会试试这个。
【解决方案3】:

现在有了 dx 命令。

我在一个带有本地 _picture 对象的 c++ 函数中;显示一个成员(“字段”?)我用这个:

0:000> dx _picture.rows

_picture.rows    : 400 [Type: int]

这里是dv的结果,说明我在函数里其实有两个图片对象:

0:000> dv

   _picture2 = class cv::Mat
   _picture = class cv::Mat

【讨论】:

  • 您应该参考较新版本的答案来限定您的答案,当时提出问题时 dx 不可用
猜你喜欢
  • 2013-07-17
  • 2012-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
相关资源
最近更新 更多