显示没有方法名称的调用堆栈
Display callstack without method names
在 WinDbg 中,我可以使用 k
命令获取调用堆栈。对于没有符号的 DLL,它会显示不正确的方法名称和较大的偏移量,例如
0018f9f0 77641148 syncSourceDll_x86!CreateTimerSyncBridge+0xc76a
由于我没有符号,所以我必须将此信息提供给 DLL 的开发人员。我不知道谁来解决这个bug,他有多少调试知识。我想避免开发人员认为问题出在 CreateTimerSyncBridge() 方法中。
有没有办法在没有方法名的情况下获取调用堆栈,只用偏移量?
目前我正在使用以下解决方法:
0:000> ? syncSourceDll_x86!CreateTimerSyncBridge+0xc76a
Evaluate expression: 1834469050 = 6d57c6ba
0:000> ? syncSourceDll_x86
Evaluate expression: 1834287104 = 6d550000
0:000> ? 6d57c6ba-6d550000
Evaluate expression: 181946 = 0002c6ba
所以我可以手动将调用堆栈修改为
0018f9f0 77641148 syncSourceDll_x86!+0x2c6ba
但是对于很多线程中的很多帧来说,这真的很难做到。
您可以使用更严格的评估来指定符号必须完全匹配,方法是使用命令行参数 -ses
启动 windbg 或发出命令:
.symopt +0x400
调试器的默认值为 false,如果您想重置它,只需删除选项:
.symopt -0x400
在 WinDbg 中,我可以使用 k
命令获取调用堆栈。对于没有符号的 DLL,它会显示不正确的方法名称和较大的偏移量,例如
0018f9f0 77641148 syncSourceDll_x86!CreateTimerSyncBridge+0xc76a
由于我没有符号,所以我必须将此信息提供给 DLL 的开发人员。我不知道谁来解决这个bug,他有多少调试知识。我想避免开发人员认为问题出在 CreateTimerSyncBridge() 方法中。
有没有办法在没有方法名的情况下获取调用堆栈,只用偏移量?
目前我正在使用以下解决方法:
0:000> ? syncSourceDll_x86!CreateTimerSyncBridge+0xc76a
Evaluate expression: 1834469050 = 6d57c6ba
0:000> ? syncSourceDll_x86
Evaluate expression: 1834287104 = 6d550000
0:000> ? 6d57c6ba-6d550000
Evaluate expression: 181946 = 0002c6ba
所以我可以手动将调用堆栈修改为
0018f9f0 77641148 syncSourceDll_x86!+0x2c6ba
但是对于很多线程中的很多帧来说,这真的很难做到。
您可以使用更严格的评估来指定符号必须完全匹配,方法是使用命令行参数 -ses
启动 windbg 或发出命令:
.symopt +0x400
调试器的默认值为 false,如果您想重置它,只需删除选项:
.symopt -0x400