如何在WinDbg中查看成员变量的值?

时间:2016-08-24 21:28:38

标签: c++ debugging windbg

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

例如我在模块Db!MyRecordSet::m_strQuery中有一个变量,我怎样才能看到m_strQuery的值?

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

x Db!MyRecordSet m_*

但它返回时没有做任何事情或显示任何消息..只是回报没有发生任何事情。

3 个答案:

答案 0 :(得分:2)

如果我正确获得MASM文档,那么带有两个冒号的语法应该适用于符号:

  

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

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

除此之外,x命令只能显示符号本身并且不会将其映射到内存地址,因此我认为您正在寻找dt d < / strong> isplay t ype)命令,带有

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)

答案 1 :(得分:0)

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 modulename!classname 0xffffffff`xxxxxxxx memberofclass

答案 2 :(得分:0)

现在有了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