我知道我正在处理托管线程,但我从未设法让!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.
它的进展: - )
答案 0 :(得分:0)
请发布!dumpstack或k的输出来仔细检查callstack,你知道!clrstack只显示托管代码调用堆栈,但是有时,如果托管线程完成了这项工作,它将在CLR代码中等待(信号量)如果你使用线程池,并且剩余调用堆栈变得完全不受管理,则调用stack.so!clrstack不显示任何内容。