關於windebug查詢程序中各個執行緒佔用cpu時間,解決CPU佔用很大問題
按照如下步驟進行:
(1)如果在除錯,請在vs中的除錯選單中分離選單專案,將除錯程序與vs分離;
(2)啟動windebug,設定改程序的符號檔案路徑,符號檔案分為兩種,一個是系統的符號檔案,一個是自己程序的符號檔案,關於符號檔案設定比較簡單,網路找到即可,我的符號檔案設定如下:SRV*d:\sysmbol* http://msdl.microsoft.com/download/symbols;E:\Work\NVMS_V3\trunk\Bin
(3)選擇windebug的選單 File->Attach to a process附加到某一程序,如此就可以用windebug工具除錯對應程序,輸入各種命令檢視當前程序狀態
(4)檢視cpu佔用100%的問題,關鍵在於檢視程序中各個執行緒佔用cpu時間,我們可以使用命令 “!runaway” ,執行如下
0:027> !runaway
User Mode Time
Thread Time
20:978 0 days 0:07:07.765
0:f58 0 days 0:00:06.015
18:19c 0 days 0:00:00.046
14:48c 0 days 0:00:00.015
13:424 0 days 0:00:00.015
27:eb0 0 days 0:00:00.000
26:a58 0 days 0:00:00.000
25:c30 0 days 0:00:00.000
24:e40 0 days 0:00:00.000
23:c6c 0 days 0:00:00.000
22:9f0 0 days 0:00:00.000
21:974 0 days 0:00:00.000
19:98 0 days 0:00:00.000
17:494 0 days 0:00:00.000
16:418 0 days 0:00:00.000
15:9a8 0 days 0:00:00.000
12:51c 0 days 0:00:00.000
11:f7c 0 days 0:00:00.000
10:54c 0 days 0:00:00.000
9:594 0 days 0:00:00.000
8:570 0 days 0:00:00.000
7:dc 0 days 0:00:00.000
6:110 0 days 0:00:00.000
5:510 0 days 0:00:00.000
4:514 0 days 0:00:00.000
3:50c 0 days 0:00:00.000
2:674 0 days 0:00:00.000
1:648 0 days 0:00:00.000
可以從以上資訊中找到對應20號執行緒,也就是執行緒地址為978的執行緒佔用cpu較高,問題癥結就在這裡了,找到20號執行緒執行堆疊資訊就知道你的程序現在不停的在做什麼事情了!!
(5)剩下的就是列印20號執行緒對應堆疊,找到20號執行緒佔用時間問題,使用命令~20kb(~*kb是檢視所有執行緒堆疊資訊)列出20號執行緒堆疊
ChildEBP RetAddr Args to Child
05e8fe84 0202efc2 0202ef97 7c947e71 03d53248 TSVulEngine!TKBLogUpload::PrivateStartUpload+0x16 [d:\...\vul_tkblogupload.cpp @ 220]
05e8fe8c 7c947e71 03d53248 00000001 046e10a8 TSVulEngine!UploadTimerRoutine+0x2b [d:\... \vul_tkblogupload.cpp @ 43]
一看以上資訊就知道cpu耗時就在PrivateStartUpload函式中,此時檢查改函式即可定位到問題所在!