windbg使用筆記

2021-06-28 03:08:02 字數 1282 閱讀 5081

(當有進一步情況時,該貼會進行更新。)

參考**:

一直以來都遇到一些問題很難除錯,即使用vs2010自己去除錯也有些問題沒法定位,所以不得不去看下windbg如何使用。

之前都有嘗試去用,但實在是不會用,也就放下多次了。

現在又在除錯乙個程式,還是cpu占用高的問題,就想找到究竟是哪個執行緒導致的。

我現在在除錯的程式是乙個控制項,其由vs2010的c#呼叫。

windbg先設定了符號路徑和源**的路徑,也不知道是否有用,反正我在後面的除錯過程中也沒有看到**,呵呵,不過以後的除錯的多了,也可能會有改變吧。

我不知道如何去load sos.dll檔案,沒地方輸入,所以也沒有設定這一項。

首先啟動要除錯的程式,在windbg上把該程序附加上來,然後在命令輸入位置輸入:

g然後回車(或者是不輸入直接按f5也是一樣的),程式開始正常執行(此時命令輸入位置不可輸入任何內容,顯示為「busy」狀態),結果沒幾秒鐘程式就似乎 是拋了個異常出來,命令輸入的位置變得可用,於是參考上面的**趕緊load sos.dll(結果也不知道有沒有用)。看了一下列印似乎也沒啥有意思的資訊,於是繼續g執行程式。

cpu占用過高的問題定位。

由於不知道如何使命令輸入變得可用,只好等待。結果沒過多久,果然又拋了個異常出來,又變得可用了。

首先列出所有執行緒:

注意後面的那個英文句號,也是要輸入的,然後就列印出了所有執行的執行緒及相關資訊。我不會看,只注意了有個執行緒號。

然後輸入命令:

!runaway

它列出了所有執行緒的執行時間,然後調出 processes and threads 和 calls (stack) 視窗, 在 processes and threads 視窗中選中占用時間長的那個執行緒,在calls (stack) 視窗中可以看到它的呼叫堆疊,根據呼叫堆疊可以確定是哪個執行緒(其中有執行緒呼叫的函式名)。再去**裡仔細檢查該執行緒即可。

設定為windows的預設偵錯程式

偵錯程式的設定在登錄檔中的路徑為:

hkey_local_machine\software\microsoft\windows nt\currentversion\aedebug

其下有個項debugger,用於指明除錯的路徑。

windbg可以通過自身命令來完成這個設定:

windbg.exe -i
注意引數i為大寫i

以管理員身份進入到windbg.exe所在的目錄,然後執行上面命令即可。

在設定完預設的偵錯程式後,如果程式掛掉,則windbg.exe會自動啟動並捕獲到錯誤。



Vim 使用筆記

set hlsearch set nohlsearch 搜尋後清除上次的加亮 nohl nohlsearch 拷貝 很有用的一句話,規定了格式選項,讓它換行不自動空格 set formatoptions tcrqn set fo r set noautoindent 再 shift insert 正...

xemacs使用筆記

xemacs使用筆記 xemacs emacs的下一代,由lucid原創 from debian參考手冊.由於不知道什麼時候刪掉了emacs的乙個重要檔案.每次都沒法安裝好.突然發現了xemacs,於是決定使用看看.本人還是菜鳥,僅供交流 我使用的ubuntu系統,所以就直接apt get inst...

TreeView使用筆記

treeview由節點構成,建樹通過對treeview.items屬性進行操作。items是乙個ttreenodes物件,這是乙個ttreenode集。一 針對ttreenodes,也就是 treeview.items,有這些屬性 1 count,節點個數。2 item index 通過index得...