-1

我知道我正在处理一个托管线程,但我从未设法开始!clrstack工作。我总是得到:

0:000> !clrstack
OS Thread Id: 0xaabb (0)
Child SP       IP Call Site
GetFrameContext failed: 1
00000000 00000000 

诚然,我可以使用!dumpstack,但我不知道如何让它显示论点。它只显示 ChildEBP、返回地址和函数名称。此外,它混合了托管和非托管调用,我只想关注托管部分。

更新

根据 Thomas 的要求,!clrstack -i返回:

0:000> !clrstack -i
Loaded c:\cache\mscordbi.dll\53489464110000\mscordbi.dll
Loaded c:\cache\mscordacwks_x86_x86_4.0.30319.34209.dll\5348961E69d000\mscordacwks_x86_x86_4.0.30319.34209.dll



Dumping managed stack and managed variables using ICorDebug.
=================================================================
Child SP IP       Call Site
003ad0bc 77d1f8e1 [NativeStackFrame]
Stack walk complete.

它的进展:-)

4

1 回答 1

0

请发布 !dumpstack 或 k 的输出以仔细检查调用堆栈,您知道 !clrstack 仅显示托管代码调用堆栈,但是有时,如果托管线程完成这项工作,它将在 CLR 代码中等待(信号量)如果您使用线程池,并且剩余的调用堆栈成为完全非托管的调用堆栈。所以 !clrstack 什么也不显示。

于 2016-08-15T11:02:52.940 回答