如何避免 WinDbg 调用堆栈中的 ChildEBP 和 RetAddr?
How to avoid ChildEBP and RetAddr in WinDbg call stack?
如果使用k
命令在WinDbg中输出调用堆栈,则输出包括开头的两列ChildEBP和RetAddr:
ChildEBP RetAddr
0151d9c8 55c59339 KERNELBASE!RaiseException+0x48
0151da08 00e15b3a msvcr120!_CxxThrowException+0x5b [f:\dd\vctools\crt\crtw32\eh\throw.cpp @ 152]
...
鉴于我想通过调用堆栈的相似性对许多故障转储进行聚类,ChildEBP 和 RetAddr 地址阻止我这样做:即使调用堆栈实际上相同,它们也不同,只是因为地址不同加载 DLL 的位置。
很明显,这些东西可以通过一些简单的文本处理来删除,但可能在 WinDbg 中有一些命令允许显示没有 ChildEBP 和 RetAddr 的调用堆栈:
KERNELBASE!RaiseException+0x48
msvcr120!_CxxThrowException+0x5b [f:\dd\vctools\crt\crtw32\eh\throw.cpp @ 152]
...
?
如 Sean Cline in the comments already, kc
所述,显示 clean 堆栈。
如果使用k
命令在WinDbg中输出调用堆栈,则输出包括开头的两列ChildEBP和RetAddr:
ChildEBP RetAddr
0151d9c8 55c59339 KERNELBASE!RaiseException+0x48
0151da08 00e15b3a msvcr120!_CxxThrowException+0x5b [f:\dd\vctools\crt\crtw32\eh\throw.cpp @ 152]
...
鉴于我想通过调用堆栈的相似性对许多故障转储进行聚类,ChildEBP 和 RetAddr 地址阻止我这样做:即使调用堆栈实际上相同,它们也不同,只是因为地址不同加载 DLL 的位置。
很明显,这些东西可以通过一些简单的文本处理来删除,但可能在 WinDbg 中有一些命令允许显示没有 ChildEBP 和 RetAddr 的调用堆栈:
KERNELBASE!RaiseException+0x48
msvcr120!_CxxThrowException+0x5b [f:\dd\vctools\crt\crtw32\eh\throw.cpp @ 152]
...
?
如 Sean Cline in the comments already, kc
所述,显示 clean 堆栈。