windbg除錯C 程式

2021-08-03 12:33:04 字數 2262 閱讀 9372

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 ...