差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

Both sides previous revision 前次修改
下次修改
前次修改
cpp:wdm:generic:trace_bsod_with_windbg [2017/08/01 11:57]
tony
cpp:wdm:generic:trace_bsod_with_windbg [2023/06/25 09:48] (目前版本)
行 2: 行 2:
 ====== Trace BSOD with WinDbg ====== ====== Trace BSOD with WinDbg ======
 ===== Introduction ===== ===== Introduction =====
-本篇文章記錄使用WinDbg追蹤BSOD root cause的過程,目的在於透過minidump去找出發生問題的程式碼。而要透過minidump的主要原因,是因為完整的memory ​deump太大,不易從客戶手中獲得。本篇文章包含:​+本篇文章記錄使用WinDbg追蹤BSOD root cause的過程,目的在於透過minidump去找出發生問題的程式碼。而要透過minidump的主要原因,是因為完整的memory ​dump太大,不易從客戶手中獲得。本篇文章包含:​
   - Launch WinDbg: 使用WinDbg載入並分析minidump。   - Launch WinDbg: 使用WinDbg載入並分析minidump。
   - Setup Symbol Path: 載入Symbol以獲得詳細的callstack內容。   - Setup Symbol Path: 載入Symbol以獲得詳細的callstack內容。
行 18: 行 18:
 \\ \\
 打開後會看到類似以下畫面,接著點擊!analyze -v或直接在下方kd>​中輸入!analyze -v,就會開始分析:​\\ 打開後會看到類似以下畫面,接著點擊!analyze -v或直接在下方kd>​中輸入!analyze -v,就會開始分析:​\\
-{{:​cpp:​wdm:​generic:​windbg_after_open_minidump.png?​800|}}\\+{{:​cpp:​wdm:​generic:​windbg_after_open_minidump.png?​900|}}\\
 \\ \\
 CallStack是debug非常重要的依據,但因為目前沒載入symbol table,無法找到位置所對應的意義:​ CallStack是debug非常重要的依據,但因為目前沒載入symbol table,無法找到位置所對應的意義:​
行 37: 行 37:
 \\ \\
 完成後會出現載入testdriver.sys錯誤,這是因為缺少testdriver的symbol:​\\ 完成後會出現載入testdriver.sys錯誤,這是因為缺少testdriver的symbol:​\\
-{{:​cpp:​wdm:​generic:​windbg_after_reload_symbol_path.png?800|}}+{{:​cpp:​wdm:​generic:​windbg_after_reload_symbol_path.png|}}
 ==== Enable symbol loading diagnostics mode ==== ==== Enable symbol loading diagnostics mode ====
 在kd>​中輸入!sym noisy後,可以啟用診斷模式。 在kd>​中輸入!sym noisy後,可以啟用診斷模式。
 ==== Reload symbol ==== ==== Reload symbol ====
 啟用診斷模式後,輸入.reload /i testdriver.sys可以重新讀取symbol:​\\ 啟用診斷模式後,輸入.reload /i testdriver.sys可以重新讀取symbol:​\\
-{{:​cpp:​wdm:​generic:​windbg_reload_testdriver_sys.png?800|}}\\+{{:​cpp:​wdm:​generic:​windbg_reload_testdriver_sys.png|}}\\
 \\ \\
-由上圖可以知道WinDbg到些地方去載入symbol,所以只要把testdriver.sys放到對應目錄下並重新reload,即可通過這關。但下一關是pdb的問題:​\\ +由上圖可以知道WinDbg到些地方去載入symbol,所以只要把testdriver.sys放到對應目錄下並重新reload,即可通過這關。但下一關是pdb的問題:​\\ 
-{{:​cpp:​wdm:​generic:​windbg_reload_testdriver_pdb.png?800|}}\\+{{:​cpp:​wdm:​generic:​windbg_reload_testdriver_pdb.png|}}\\
 \\ \\
 通常build sys出來時,會伴隨著一個pdb,一樣把它放到對應目錄後並重新reload symbol。 通常build sys出來時,會伴隨著一個pdb,一樣把它放到對應目錄後並重新reload symbol。
行 58: 行 58:
 ==== The third analysis ==== ==== The third analysis ====
 在設定完Source Search Path後,再次執行分析指令,就能找到問題的對應程式碼:​\\ 在設定完Source Search Path後,再次執行分析指令,就能找到問題的對應程式碼:​\\
-{{:​cpp:​wdm:​generic:​windbg_analyze_with_source_code.png?​800|}}\\+{{:​cpp:​wdm:​generic:​windbg_analyze_with_source_code.png?​900|}}\\ 
 ===== 其它 ===== ===== 其它 =====
 ==== 如何得知driver版本?​ ==== ==== 如何得知driver版本?​ ====
行 114: 行 115:
   * [[https://​docs.microsoft.com/​en-us/​windows-hardware/​drivers/​debugger/​verifying-symbols|Verifying symbols]]   * [[https://​docs.microsoft.com/​en-us/​windows-hardware/​drivers/​debugger/​verifying-symbols|Verifying symbols]]
   * [[http://​windbg.info/​doc/​1-common-cmds.html|WinDBG commands]]   * [[http://​windbg.info/​doc/​1-common-cmds.html|WinDBG commands]]
 +  * [[https://​www.trusteer.com/​en/​support/​sending-windows-minidump|sending-windows-minidump]]
 =====    ===== =====    =====
 ---- ----
 \\ \\
 ~~DISQUS~~ ~~DISQUS~~