我試圖從客戶調試高CPU問題。我試過讓他們使用procdump,但是,它在寫入轉儲時掛起而沒有完成。相反,客戶在CPU電平飆升時使用鍵盤啓動了完整的內存轉儲。全內存轉儲丟失堆棧信息
我希望能夠看到所有進程的線程的堆棧跟蹤,但我不能看到比任何一個線程的頂級4-6堆棧幀更多。這令人沮喪,因爲這些幀只包含由錯誤檢查啓動的陷阱例程。我是WinDbg的新手,所以我不確定如何收集這些信息。我通過執行以下操作獲取堆棧信息:
2: kd> !process 0 0 process.exe
PROCESS 8997f590 SessionId: 0 Cid: 094c Peb: 7ffd6000 ParentCid: 01c4
DirBase: 503f1000 ObjectTable: e53f1880 HandleCount: 1924.
Image: process.exe
2: kd> !process 8997f590
PROCESS 8997f590 SessionId: 0 Cid: 094c Peb: 7ffd6000 ParentCid: 01c4
DirBase: 503f1000 ObjectTable: e53f1880 HandleCount: 1924.
[...]
THREAD 89daf4f0 Cid 094c.0950 Teb: 7ffdf000 Win32Thread: e53f1ae0 WAIT: (Unknown) UserMode Non-Alertable
8997f8ac NotificationEvent
[...]
ChildEBP RetAddr
b8cf9c04 8083d26e nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4])
b8cf9c30 8083dc5e nt!KiSwapThread+0x2e5 (FPO: [Non-Fpo])
b8cf9c78 809208d7 nt!KeWaitForSingleObject+0x346 (FPO: [Non-Fpo])
b8cf9ca0 8093aef7 nt!IopSynchronousServiceTail+0x180 (FPO: [Non-Fpo])
b8cf9d38 8083387f nt!NtReadFile+0x5d5 (FPO: [Non-Fpo])
b8cf9d38 7c82847c nt!KiFastCallEntry+0xfc (FPO: [0,0] TrapFrame @ b8cf9d64)
WARNING: Frame IP not in any known module. Following frames may be wrong.
0012fc58 00000000 0x7c82847c
[...]
如果我切換到任何線程的上下文並運行,例如,kb 50
我還是會只拿到最前面的幾個幀。無論如何要獲得其餘的調用堆棧?如果它被分頁到磁盤,這些信息可能不可用嗎?
此外,有關如何調試高CPU使用率的任何提示將有所幫助。
謝謝斯科特,修好了! – ReferentiallySeethru 2011-12-14 21:36:29