如何使用WinDBG列出所有托管线程的调用堆栈?

36

我有一个从托管应用程序创建的转储文件,我正在使用SOS/SOSEX扩展来简化我的转储文件分析。我想列出所有托管线程的调用堆栈,就像我们在本机应用程序中执行~*kb一样。怎么做呢?

3个回答

53

6
.loadby sos clr更好(适用于.NET 4),或者.loadby sos mscorwks。 - Ana Betts
2
对于 .net 4,我下载了 sos 的 .net 4 版本,Psscor4 http://www.microsoft.com/en-gb/download/details.aspx?id=21255,并将 dll 放置到 windbg 文件夹中 - 将正确的 dll 与正确的 windbg 版本 (32位|64位) 匹配,然后加载 .load Psscor4.dll - Chris Moutray
@sarat 请看JasonE的答案。 - Ohad Schneider
!EEStack -short - pkr

36

这个命令将会转储所有托管线程

~*e!dumpstack

1
请注意,这需要首先通过.loadby sos clr加载适当的调试扩展。 - Dirk Vollmar
2
或者 ~*e!clrstack - AlexPi

15

使用sosex工具,可以使用 ~*e!mk 命令(~ - 线程,* - 所有线程,e - 执行此命令,!mk - 显示托管堆栈)。sosex中的大多数命令与本机命令相同,但在它们前面加上了m(托管)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接