1. 程式人生 > >關於windebug查詢程序中各個執行緒佔用cpu時間,解決CPU佔用很大問題

關於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函式中,此時檢查改函式即可定位到問題所在!