Windbg DUMP分析(原創彙總)

2022-02-13 07:10:27 字數 2353 閱讀 5587

1. 引入篇

記一次記憶體洩漏dump分析:

高cpu、資料庫無法讀寫的真兇:

引入篇1.2 偵錯程式

1.3 操作介面

所謂技術分享,其實是乙個自我總結和相互學習、不斷成長的過程。

考慮到之前原創的文章《記一次記憶體洩漏dump分析》被**,

而且有的沒有說明出處,

這裡所有的都打了標記,不好意思啊。

安裝目錄下,有四個偵錯程式程式。

cdb.exe和 ntsd.exe只支援使用者模式除錯;kd.exe主要用於核心除錯,有時候也用於使用者模式。上述三者只能在控制台介面以命令列形式工作。

windbg.exe採用視覺化的使用者介面,支援使用者模式和核心模式除錯。在兩種模式下,都支援實時除錯模式和事後除錯模式。另外,還支援原始碼級的除錯。

命令篇2.1 按照**劃分

2.2 按照功能劃分

按照**劃分

2.1.1 基本命令

2.1.2 元命令

2.1.3 擴充套件命令

用?檢視基本命令

用.help檢視元命令

用.chain檢視擴充套件模組,再檢視指定模組下的所有擴充套件命令

按照功能劃分

2.2.1 系統資訊

2.2.2 程序

2.2.3 模組

2.2.4 符號

2.2.5 執行緒

2.2.6 記憶體

2.2.7 事件

這裡列出了作業系統版本、系統持續執行時間、除錯時間等資訊。

windbg能夠同時除錯多個程序。可以直接附加已經存在的程序,也可以建立新的程序並附加上去。 需要先切換到目標程序,檢查當前程序的環境資訊,以確認是否切換成功。 最後,結束對當前程序的除錯。

檢視程序資訊,以及包含的程式域。

模組資訊相關的命令。

列出了當前除錯程序要載入的模組符號資訊,將指定模組儲存為程式集,反編譯看看效果還不錯,不過有些變數名不是能直接看懂的。

比如檢視模組映象檔案重定位資訊,可以發現基本上都是最優的。也可以檢視pe頭資訊研究一下。

在建立二進位制映象檔案時,伴生的字尾名為.dbg、.sym或.pdb的檔案稱為符號檔案,包含如下符號資訊:

1)原始檔路徑以及每個符號的行號。

2)變數的名字和位址。

3)函式名稱、位址及其原型。

4)幀指標優化資料。

5)變數、結構等的型別資訊。

符號路徑用於告訴偵錯程式去**尋找符號檔案,除錯過程中,只有正確設定了符號路徑,使得偵錯程式能夠將除錯目標、符號檔案以及原始碼檔案一一對應起來,才能夠最好地發揮偵錯程式的強大功用。

如果涉及到成千上萬個符號檔案,以及同乙個符號檔案存在不同平台下的不同版本的時候,那麼一一手動設定符號路徑肯定是不現實的,於是引入符號伺服器的概念。符號伺服器有一套命名規則,使得偵錯程式能夠正確找到對應平台和版本的符號檔案。

windbg訪問符號需要兩個檔案(symsrv.dll 和 symstore.exe),需要設定系統變數告訴他這兩個檔案放在什麼地方。

檢視執行緒的基本資訊。

比如列出所有(託管)執行緒。

執行緒號是由偵錯程式軟體內部維護的執行緒id值,是乙個從0開始的整數,在外部是沒有太大意義的。

執行緒id是系統維護的系統唯一的id值。

執行緒的凍結狀態,決定了是否分發cpu時間給它。

檢視執行緒的堆疊資訊。

檢視執行緒的時間資訊,包括三個方面:自建立之初到現在的總消耗時間、使用者模式執行時間、核心模式執行時間。

除了耗時,還可以檢視執行緒池的資訊。

記憶體是儲存資料、**的地方,通過記憶體檢視命令可以分析很多問題。通過檢視堆上的大物件,以及物件的持有者,了解沒有被**的原因等。

通過檢視堆上的大物件,以及物件的持有者,了解沒有被**的原因等。

windbg是事件驅動的。

比如程式故障分析,電腦藍屏故障分析等。

**篇3.1方法內聯

3.2 字串駐留池

預設情況下,release版本進行了各種優化,其中,將被呼叫方法的方法主體移入呼叫方的主體,就可以避免某些方法的呼叫開銷,這一操作稱為方法內聯。

可以發現,docalc方法被內聯,而calc方法卻不會。這裡提到乙個問題,什麼是優秀的**,我的理解是除了讓人看的舒服,還要更貼近編譯優化後的**。

程式啟動時,系統域中的駐留池負責管理被駐留的字串。抓取dump分析,查詢這些字串的根,發現都在乙個object陣列中,檢視這個陣列,果然是駐留池。

引用架構師修煉中的一段話:

發現問題永遠都比解決問題更加重要。一般來說,從問題暴露的點,一點點去溯源查詢,一定會找出來誰的問題,以及是什麼問題。

最壞情況就是當我們時間或者能力有限,實在是無法定位出是誰的問題的時候,比如系統出故障,也就意味著我們無法根本解決問題。這時最好的辦法就是去降低問題發生所帶來的成本,盡量去隔離問題影響的範圍,留出時間和空間去識別真正的問題。

原創 組合語言的基本知識(一)

1,彙編指令的組成 彙編指令 有對應的機器碼 偽指令 沒有對應的機器碼,計算機不執行 其他符號 沒有對應的機器碼,2,指令和資料 在記憶體和磁碟行,指令和資料沒有任何區別,都是二進位制資訊 3,cpu對儲存器的讀寫 1 儲存單元 以位元組為最小單位 2 cpu對外部器件通訊,有三類資訊的互動 儲存單...

原創 測試需求分析

原創 測試需求分析 一 什麼是測試需求 所謂測試需求即是指所要測試的物件中哪些需要測試,具體是什麼。二 測試需求分析方法 說明 需求分析法一般是從三方面分析 1功能需求 2非功能需求 3 限制條件 1 商業目標法 所謂商業目標法指去衡量需求產生的背景及解決使用者問題的目標是否一致 2 業務模型法 所...

原創 通用SP ST HI框架分析

ssh sp st hi 這個目前最流行的web框架體系 很多愛好者在研究 不過網上的資料還是不多 有的例子介紹的 根本跑不起來 我們需要的 是乙個可以 走一邊流程的ssh 例子 在我一位 qq好友 的幫助 下 跑了乙個ssh 的完整的例子 經過自己1個星期的 研究 個人認為 如果 用那個專案的模式...