命令x
从未真正适用于我。我可以dv
显示局部变量,但不显示类的成员变量。我一直依赖于watch locals变量窗口来查看这些值但是如何通过x
命令查看它们?
例如我在模块Db!MyRecordSet::m_strQuery
中有一个变量,我怎样才能看到m_strQuery的值?
我特别喜欢使用通配符来查看所有成员变量:
x Db!MyRecordSet m_*
但它返回时没有做任何事情或显示任何消息..只是回报没有发生任何事情。
答案 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)
检查一下。
简单地,该命令就像: 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