在使用windbg調試windows中的程序時會常常碰到一些系統的dll裏面的一些函數調用,有些函數是沒有具體函數名的,這對於調試很是不利,基於此,微軟針對windows也發佈了不少系統dll對應的符號表,這些符號表現在基本集成在了微軟的符號表服務器中,本文簡單講一下如何在windbg中加載符號表。shell
首先給一個最經常使用的方式,要作的工做基本就是先在本地指定的文件目錄搜索對應的符號表,若是找不到就鏈接遠程服務器下載,並保存在本地,方便下次使用,以下windows
.sympath srv*c:\Symbols*https://msdl.microsoft.com/download/symbols
這是對於沒有符號表的狀況,若是本地原本就有符號表的緩存,可是考慮到windows版本等問題,相同的符號表會不會覆蓋等狀況,建議使用下面的方法從遠程加載新的符號表爲本次調試使用緩存
.sympath c:\MyRegularSymbols;srv*c:\MyServerSymbols*https://msdl.microsoft.com/download/symbols
順利的話在加載完符號表之後須要從新載入模塊,命令以下:服務器
.reload
當調試的東西不少,符號表愈來愈大的時候,可使用agestore
來管理不經常使用的符號表,下面舉幾個例子。函數
如下命令刪除C:\MyDir
中2008年1月7日以前訪問的文件:debug
agestore c:\mydir -date=01-07-2008
如下命令將刪除目錄樹中從屬於C:\symbols\downstreamstore
的全部文件,這些文件在30天內沒有訪問:調試
agestore c:\symbols\downstreamstore -days=30 -s
如下命令刪除從屬於C:\symbols\downstreamstore
目錄樹中大於50,000字節的文件:code
agestore c:\symbols\downstreamstore -size=50000 -s
更多的內容能夠參考微軟官方的文檔文檔
符號表設置之後無法加載,或加載失敗?get
首先檢查本地是否真的有網,沒問題的話,考慮科學的上網或許能夠加速下載,若是還不行,可能就是符號表服務器的問題,這類問題已經屢次了。
另外,在排查問題的時候能夠嘗試使用!sym noisy
命令,實時輸出調試器加載符號表時候的信息。先運行!sym noisy
再運行.reload
。