我在四台服务器上生成了转储,并正在分析!threadpool和!threads的输出.我注意到大致一致的输出:
0:024> !threadpool
CPU utilization 0%
Worker Thread: Total: 2 Running: 0 Idle: 2 MaxLimit: 200 MinLimit: 2
Work Request in Queue: 0
Number of Timers: 27
Completion Port Thread:Total: 2 Free: 0 MaxFree: 4 CurrentLimit: 2 MaxLimit: 200 MinLimit: 2
!threads -special
ThreadCount: 32
UnstartedThread: 0
BackgroundThread: 19
PendingThread: 0
DeadThread: 13
Hosted Runtime: no
我的问题是:
1)我怎样才能确定这27个计时器的来源是什么?
2)13个死线是什么意思?
3)我的一个线程被标记为有锁.如果我切换到该线程并运行!clrstack,我会看到以下内容 - 它与我的计时器有关吗?
0:027> !clrstack
OS Thread Id: 0x14cc (27)
*** WARNING: Unable to verify checksum for System.ni.dll
Child-SP RetAddr Call …
Run Code Online (Sandbox Code Playgroud) 我们的WCF svc文件包含以下内容:
<%@ ServiceHost Service="Foo"
Factory="Bar"
Language="C#"
Debug="true" %>
Run Code Online (Sandbox Code Playgroud)
在这种情况下,debug = true意味着什么?web.config有debug = false,但我不知道这个意味着什么,无法在MSDN上找到引用.
我正在为windbg使用启动脚本,并希望调试子进程(.childdbg 1).但是,一旦我启用它,我发现创建子进程时windbg会自动中断.我不确定为什么会这样,但这是我正在使用的脚本:
sxe -c ".echo ********** CLR 1st Chance Exception **********;!pe -nested;.echo ----------- CLRStack ----------;!clrstack;g" clr
sxe -c ".echo Child Process Created;g" cpr
sxe -c ".echo Child Process Exited;g" epr
.load psscor2.dll
.childdbg 1
Run Code Online (Sandbox Code Playgroud)
我通过以下命令调用它:
windbg.exe -Q -c "$<c:\path\startup.ini" Foo.exe
Run Code Online (Sandbox Code Playgroud)
最后,这是windbg的输出:
(1d14.191c): Break instruction exception - code 80000003 (first chance)
eax=00000000 ebx=00000000 ecx=0022f86c edx=778670b4 esi=fffffffe edi=00000000
eip=778c04f6 esp=0022f888 ebp=0022f8b4 iopl=0 nv up ei pl zr na pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000246
ntdll!LdrpDoDebuggerBreak+0x2c:
778c04f6 cc int 3
Run Code Online (Sandbox Code Playgroud)