使用 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>
我正在使用 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>