windbg 簡單使用



==========================
下載 windbg
==========================
搜索 windbg 官網, http://windbg.org/

windbg 工具包含在  Windows Software Development Kit (SDK) 中, 所以要下 windows SDK.  我的操作系統系統 win7, 所以下的是 win7版本 SDK,  下載地址為 https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/
下載下來的是一個installer, 在installer中選 Debugging Tools for Windows"

==========================
下載 windows的 symbols 配置
==========================
一般的 windows 的dll/exe程序文件都做過優化, 文件內部並不包含symbol信息(函數名/變量名), 所以分析dump文件, 一定需要先下載這些程序的 symbol 文件, symbol 文件一般的擴展名是 *.pdb.

1. [有效方法] 下載 symbol 方法:

微軟已經不提供offline symbols 下載包, 只能使用 symchk.exe 下載.
將symbols文件下載到本地命令格式為:
"C:\Program Files\Debugging Tools for Windows (x64)\symchk.exe" [filename] /s SRV*[symbol_folder]*http://msdl.microsoft.com/download/symbols

示例1: 將指定的calc.exe的pdb文件下載到本地 c:\symbols
"C:\Program Files\Debugging Tools for Windows (x64)\symchk.exe" "c:\windows\system32\calc.exe" /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols

示例2: 掃描c:\windows 下所有的exe/dll文件, 並把它們對應的pdb文件下載到本地 c:\symbols
"C:\Program Files\Debugging Tools for Windows (x64)\symchk.exe" /r c:\windows /s SRV*c:\symbols\*http://msdl.microsoft.com/download/symbols
其中 /r 代表循環, -r c:\windows 即循環windows系統目錄下的exe/dll文件, 所以上面的命令會花費很長時間才能完成下載.

 

 


==========================
windbg 中使用已經下載的symbols
==========================
查看當前的symbol search path, 只需要直接運行 .sympath 即可.
.sympath

要本地程序的 C:\symbols 路徑, 使用.sympath+ 命令,
.sympath+ C:\symbols
.sympath+ cache*

直接設置sym path 命令,
.sympath C:\symbols1;C:\symbols2

 

==========================
windbg 中直接使用微軟服務器上的symbols
==========================

使用下面命令:
.sympath srv*c:\symbols*https://msdl.microsoft.com/download/symbols

前綴srv代表是 symbol server
第一個*后是download server下載下來的local directory,
第二個*后是微軟 symbol server path, 包含 shell32.dll, gdi32.dll, advapi32.dll, kernel32.dll, ntdll.dll 等文件的symbols.

 

==========================
准備自研工具的symbols
==========================

推薦將 windows 官方的symbols單獨放到一個目錄, 比如 c:\symbols

將自研工具的pdb文件 放到另一個目錄, 比如c:\privateSymbols 

.sympath+ C:\privateSymbols

 

==========================
加載 symbols 文件
==========================
設置 symbol search path之后, 需要加載相關 modules 的 symbol 文件, windbg 命令為:
.reload /f
該命令也能報錯當前缺少哪些 symbol 庫. 如果使用了微軟遠端的symbols server, reload 命令需要很久時間, 見下面的截圖.

如果 .reload /f 命令報錯, 可以使用下面命令進入 verbose 模式, 可以看出更詳盡的信息:
!sym noisy
然后再運行 .reload /f 命令

 

 


==========================
創建需要debug程序的 dump 文件
==========================

可以用任務管理器將該程序的進程導出一個轉儲dump文件,  有時會報 "拒絕訪問"的錯誤, 原因往往是資源管理和你程序64bit/32bit版本不一致, 但有時候也不太管用.

 

推薦使用 windbg , 方法是: windbg 菜單 file/attach to a process, 選中目標程序, 然后運行下面命令:

.dump /ma /u c:\calc.dmp

.dump命令參數比較多,常用的組合就是/ma,/m表示生成minidump,/a表示dmp包含所有信息,/u參數就是上面說的附加時間和PID信息到文件名。

 

================================
windbg 實例學習
================================
記一次使用windbg排查內存泄漏的過程
https://www.cnblogs.com/lanxiaoke/p/12997032.html

 

調試內存泄漏問題的一些經驗

http://fresky.github.io/2015/06/21/how-to-attack-the-memory-leak-issue/

 

https://www.codeproject.com/articles/31382/memory-leak-detection-using-windbg

 

https://stackoverflow.com/questions/674247/vb6-memory-leak


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM