兩種類(lèi)型的符號(hào)文件
符號(hào)文件有兩種類(lèi)型:
- full symbol:包含public symbols和private symbols
- stripped symbol:只包含public symbols澈圈,vc鏈接設(shè)置選項(xiàng)中生成stripped類(lèi)型symbol的產(chǎn)出拓哟,只有全局變量和函數(shù),可以視為是每個(gè)obj導(dǎo)出的變量和函數(shù)都许,可以供其他obj調(diào)用的,其他本地變量這些都不包含
調(diào)試如何查找符號(hào)文件路徑
vs生成的debug版二進(jìn)制文件會(huì)包含文件路徑和文件名信息耳幢,同時(shí)把符號(hào)文件和二進(jìn)制文件放在同個(gè)目錄下轴总。這樣,只要符號(hào)文件不變刮便,那么調(diào)試器就不需要設(shè)置符號(hào)文件路徑也能自動(dòng)定位到對(duì)應(yīng)的符號(hào)文件。
符號(hào)文件帶有日期和時(shí)間戳绽慈,所以通過(guò)這個(gè)調(diào)試器來(lái)區(qū)別不同版本的符號(hào)文件恨旱,而不會(huì)發(fā)生混淆
WinDbg的使用步驟
-
打開(kāi)需要分析的崩潰文件
打開(kāi)崩潰文件 -
設(shè)置符號(hào)文件查找路徑
執(zhí)行命令.sympath \\192.168.1.1\Symbols\MyProject\1.1.1.1;cache*D:\Symbols;srv*
這里設(shè)置了兩個(gè)路徑,一個(gè)是我們自己的二進(jìn)制文件對(duì)應(yīng)的符號(hào)文件所在的路徑:\192.168.1.1\Symbols\MyProject\1.1.1.1
另外一個(gè)則是符號(hào)文件的緩存路徑D:\Symbols坝疼,主要用于緩存Windows符號(hào)文件
這兩個(gè)路徑可以按自己的實(shí)際情況進(jìn)行修改搜贤,此外,還可以在setting里進(jìn)行設(shè)置钝凶,這樣就不用每次都設(shè)置一遍這個(gè)路徑仪芒,會(huì)自動(dòng)重用
通過(guò)Settings來(lái)設(shè)置符號(hào)文件查找路徑 -
分析崩潰文件
輸入命令!analyze -v
進(jìn)行崩潰的分析,一般這個(gè)命令的分析結(jié)果里面有對(duì)應(yīng)的崩潰所在的函數(shù)堆棧顯示,還有對(duì)應(yīng)的崩潰在哪一行的定位桌硫,大部分情況下就已經(jīng)足夠我們找到崩潰原因了夭咬。
崩潰堆棧
崩潰所對(duì)應(yīng)源碼位置
WinDbg的一些常用命令說(shuō)明
WinDbg的命令如果是.開(kāi)頭的表示這個(gè)命令是一個(gè)配置命令,如果是!開(kāi)頭的則表示這是一個(gè)擴(kuò)展命令
符號(hào)文件路徑設(shè)置命令
- .sympath:顯示當(dāng)前符號(hào)文件查找路徑
- .sympath cache*<路徑>:設(shè)置緩存路徑铆隘,不指定具體路徑則使用默認(rèn)的
- .sympath cache*<路徑>;srv*:設(shè)置符號(hào)文件下載路徑卓舵,不指定則用默認(rèn)的(https://msdl.microsoft.com/download/symbols)
- .sympath <路徑>;cache*;srv*:設(shè)置多個(gè)查找路徑組合
- .reload:如果重新設(shè)置了路徑,那么用這個(gè)命令重新進(jìn)行符號(hào)文件的查找