windbg的安裝與配置
安裝後就可以在開始選單找到windbg了。
要先除錯.net的程式,需要使用乙個擴充套件的dll,它在c:/windows/microsoft.net/framework/v2.0.50727路徑下,檔名是sos.dll。有了它我們才能執行命令(!clrstack),拷貝乙份到windbg.exe所在的目錄。
具體鏈結是:
我們需要連線微軟的symbol伺服器:在windbg file選單下,symbol file path中加入這一項,
srv*c:/symbolcache*
另外就是你所編寫的程式的符號檔案,它應該在debug目錄下,副檔名是pdb的檔案,把這個路徑也加進來。
這樣準備工作就做好了。
執行你要除錯的.net程式,切換到windbg,按f6,出現附加程序對話方塊。在最下面可以找到你剛啟動的程式的程序,ok。
這時,在windbg介面的最下面會出現乙個命令輸入行,我們首先將sos.dll擴充套件加進來。
輸入:.load sos.dll
這時我們就都準備好,可以開始除錯了!
!clrstack 錯誤提示
clrstack: no export clrstack found
如果是.net3.5或更低版本需要「.loadby sos mscorwks」載入sos。
如果是.net4.0版本需要「.loadby sos clr」。
檢視最耗記憶體的所在
.cls -------------------------------清屏
~ ----------------------------------檢視當前程式的所有執行緒
~0s --------------------------------切換到我們需要除錯的原託管執行緒中
!threads ---------------------------命令可以檢視程序內所有的託管執行緒,僅僅是託管執行緒
!dumpheap -stat --------------------統計堆的資訊
!dumpheap -type system.string ------檢視string型別在堆中的資訊.為什是string,是因為在!dumpheap -stat的結果中,發現string占用最記憶體最多
!gcroot 02029348 -------------------檢視記憶體很高的堆位址, 02029348 是!dumpheap結果中有對string操作的堆最大的adress
!help gcroot -----------------------檢視gcroot的幫助
gcroot會顯示system.string 耗用過多的整個呼叫過程.
handletable:
001613e8 (pinned handle)
-> 02fc5328 system.object
-> 02028ab8 mysql.data.common.cache`2[[system.string, mscorlib],[mysql.data.mysqlclient.mysqlconnectionstringbuilder, mysql.data]]
-> 02028acc system.collections.generic.dictionary`2[[system.string, mscorlib],[mysql.data.mysqlclient.mysqlconnectionstringbuilder, mysql.data]]
-> 020407e0 system.collections.generic.dictionary`2+entry[[system.string, mscorlib],[mysql.data.mysqlclient.mysqlconnectionstringbuilder, mysql.data]]
-> 02028bf4 mysql.data.mysqlclient.mysqlconnectionstringbuilder
-> 02028c18 system.collections.generic.dictionary`2[[system.string, mscorlib],[system.object, mscorlib]]
-> 02029348 system.collections.generic.dictionary`2+entry[[system.string, mscorlib],[system.object, mscorlib]]
根據這個提示,我們找到原始碼中mysql.data.common.cache類中的呼叫**,然後根據實際情況進行改進
WinDbg除錯 崩潰程式
目的 學習和記錄windbg的一些使用。版本不是最新的,如果需要最新的可以自己在網上搜尋一下,當然還有很多漢化版的 我個人喜好原版 1.1關於配置 這個主要就是symbol的問題了,網上一般都會推薦 設定環境變數例如 我的電腦 右鍵選單 屬性 高階選項卡 環境變數 系統變數 新建 變數名 nt sy...
windbg除錯驅動程式
不正確之處歡迎指正,高手勿噴 配置windbg路徑 symbol path srv f windows symbolxp3 source path c users bojay desktop first image path c users bojay desktop first objchk wx...
Windbg除錯異常
用windbg分析包含異常資訊的dump檔案時,往往當前棧幀已不正確,可通過如下步驟找回 1 teb,找到stackbase和stacklimit 2 通過.cxr命令將異常上下文恢復到相關暫存器 如何找到異常上下文的位址呢?方法一 dds dps dqs stacklimit stackbase ...