使用 Windbg 只获取对象的 属性 值的方法是什么?

What's the way to get only the property value of an object using Windbg?

我正在使用 PYKD 进行转储调试,因此我正在使用 PYKD dbgCommand() 来获取有关对象的信息。

问题是:dbgCommand() 结果需要解析才能使用,如您在以下示例中所见:

source code : result = dbgCommand(("dt -c CStringArray m_nSize " + pointer_format) % (ptr)).split(' : ')
example     : dt -c CStringArray m_nSize 0x03966ce8
example output : 
  <application>!CStringArray
  +0x008 m_nSize 0n16  

我只对大小本身感兴趣 (0n16),我可以解析结果以获得此结果,但由于我有很多对象(大约 100,000 个),这变得非常耗时,所以我想尽可能地限制结果。

有没有办法(使用其他显示选项,使用除 dt 以外的其他命令,如果需要使用本机可视化工具)得到以下情况:

dt <options> CStringArray m_nSize 0x03966ce8
0n16 // only that, nothing else

与此同时,我已经更进一步,使用 dd 命令,如您所见:

0:000> dd 0x03966ce8+0x008 L1 // for a CStringArray, m_nSize is at memory address +0x008
                              // L1 means: limit the amount of answers to one byte
03966cf0  00000010            // the result only contains one line.

现在只需要想办法不再看到内存地址就可以了

你为什么不想使用 pykd 中的 typedVar class?

尝试:

print( typedVar('CStringArray', address).m_nSize )
0:000> dt -c foo m_nsize
Local var @ 0x2dfdb8 Type CStringArray
+0x008 m_nSize 0n5
0:000> .printf "%x\n" , @@c++(foo.m_nSize)
5
0:000>