static void Main(string[] args)
{
Console.Clear();
Console.WriteLine("到命令行下,切换到windbg目录,执行adplus -hang -pn highcpu.exe -o c:\\dumps");
Console.WriteLine("如果要停止,按Ctrl+C结束程序");
Console.WriteLine("====================================================");
while (true)
{
Console.SetCursorPosition(0, 3);
Console.Write(DateTime.Now.Ticks.ToString());
}
Console.ReadKey();
}
dmp:
第一个Dump:
0:000> .load clr20\sos.dll
0:000> !runaway
User Mode Time
Thread Time
0:334 0 days 0:00:00.468
3:dc8 0 days 0:00:00.000
2:14d0 0 days 0:00:00.000
1:750 0 days 0:00:00.000
第二个Dump:
0:000> .load clr20\sos.dll
0:000> !runaway
User Mode Time
Thread Time
0:334 0 days 0:00:08.221
3:dc8 0 days 0:00:00.000
2:14d0 0 days 0:00:00.000
1:750 0 days 0:00:00.000
第三个Dump:
0:000> .load clr20\sos.dll
0:000> !runaway
User Mode Time
Thread Time
0:334 0 days 0:00:11.559
3:dc8 0 days 0:00:00.000
2:14d0 0 days 0:00:00.000
1:750 0 days 0:00:00.000
从上面的输出可以看到,线程0的CPU时间不断增加,CPU高占用很可能是由于线程0正在执行的代码有问题造成的。
可以用!clrstack命令查看一下当前的调用堆栈以及其上的局部变量和值。
当执行!clrstack时,报出了如下提示:
0:000> !clrstack
Failed to find runtime DLL (mscorwks.dll), 0x80004005
Extension commands need mscorwks.dll in order to have something to do.
这不是我想要的,加载mscorwks失败。后来经过调试发现,原来是第一步就.load时就错了,因为我的那段代码用的是vs2010。所以应该加载.net frameword 4.0。
所以,最初应该执行的.load C:/WINDOWS/Microsoft.NET/Framework/v4.0.30319/sos.dll
然后在执行!clrstack
第三个Dump
0:000> !clrstack
*** ERROR: Symbol file could not be found. Defaulted to export symbols for clr.dll -
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
Child SP IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8]
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc]
第二个Dump0:000> !clrstack
*** ERROR: Symbol file could not be found. Defaulted to export symbols for clr.dll -
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
Child SP IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8]
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc]
第一个Dump:
0:000> !clrstack
*** ERROR: Symbol file could not be found. Defaulted to export symbols for clr.dll -
PDB symbol for clr.dll not loaded
OS Thread Id: 0x334 (0)
Child SP IP Call Site
001cf2b8 779e70f4 [InlinedCallFrame: 001cf2b8]
001cf2b4 6a14672e *** WARNING: Unable to verify checksum for mscorlib.ni.dll
DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, COORD)
001cf2b8 6a1b6cfd [InlinedCallFrame: 001cf2b8] Microsoft.Win32.Win32Native.SetConsoleCursorPosition(IntPtr, COORD)
001cf2ec 6a1b6cfd System.Console.SetCursorPosition(Int32, Int32)
001cf324 005500bb *** WARNING: Unable to verify checksum for ConsoleApplication3.exe
ConsoleApplication3.Program.Main(System.String[]) [C:\Users\ChenZhuo\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs @ 22]
001cf4dc 70a33e22 [GCFrame: 001cf4dc]
出问题的代码已可以看得到,就在Main方法里。