在使用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
。