如何使用 WinDBG 列出所有托管线程的调用堆栈?
Posted
技术标签:
【中文标题】如何使用 WinDBG 列出所有托管线程的调用堆栈?【英文标题】:How to list call stack of all managed threads using WinDBG? 【发布时间】:2011-12-30 07:25:23 【问题描述】:我有一个从托管应用程序创建的转储。我正在使用 SOS/SOSEX 扩展来简化我的转储分析。我想列出所有托管线程的调用堆栈,就像我们对本机应用程序进行~*kb
一样。我们如何做到这一点?
【问题讨论】:
【参考方案1】:使用sos!EEStack
命令:
0:007> .load sos
0:007> !EEStack
见SOS.dll (SOS Debugging Extension)
【讨论】:
.loadby sos clr 更好(对于 .NET 4)或 .loadby sos mscorwks 对于 .net 4,我下载了 .net 4 版本的 sos,Psscor4 microsoft.com/en-gb/download/details.aspx?id=21255,将 dll 放入 windbg 文件夹 - 将正确的 dll 与正确的 windbg 版本(32 位|64 位)匹配,然后加载.load Psscor4.dll
@sarat 看到 JasonE 的回答
!EEStack -short
【参考方案2】:
此命令将转储所有托管线程
~*e!dumpstack
【讨论】:
请注意,这需要先通过.loadby sos clr
加载适当的调试扩展
或~*e!clrstack
【参考方案3】:
对于 sosex,使用 ~*e!mk (~ - 线程,* - all,e - 执行此命令,!mk - 显示托管堆栈。sosex 中的大多数命令镜像本机命令,但具有 m (管理)在他们面前。
【讨论】:
以上是关于如何使用 WinDBG 列出所有托管线程的调用堆栈?的主要内容,如果未能解决你的问题,请参考以下文章