两种类型的符号文件
符号文件有两种类型:
- full symbol:包含public symbols和private symbols
- stripped symbol:只包含public symbols,vc链接设置选项中生成stripped类型symbol的产出,只有全局变量和函数,可以视为是每个obj导出的变量和函数,可以供其他obj调用的,其他本地变量这些都不包含
调试如何查找符号文件路径
vs生成的debug版二进制文件会包含文件路径和文件名信息,同时把符号文件和二进制文件放在同个目录下。这样,只要符号文件不变,那么调试器就不需要设置符号文件路径也能自动定位到对应的符号文件。
符号文件带有日期和时间戳,所以通过这个调试器来区别不同版本的符号文件,而不会发生混淆
WinDbg的使用步骤
-
打开需要分析的崩溃文件
打开崩溃文件 -
设置符号文件查找路径
通过Settings来设置符号文件查找路径
执行命令.sympath \\192.168.1.1\Symbols\MyProject\1.1.1.1;cache*D:\Symbols;srv*
这里设置了两个路径,一个是我们自己的二进制文件对应的符号文件所在的路径:\192.168.1.1\Symbols\MyProject\1.1.1.1
另外一个则是符号文件的缓存路径D:\Symbols,主要用于缓存Windows符号文件
这两个路径可以按自己的实际情况进行修改,此外,还可以在setting里进行设置,这样就不用每次都设置一遍这个路径,会自动重用
-
分析崩溃文件
崩溃堆栈
输入命令!analyze -v
进行崩溃的分析,一般这个命令的分析结果里面有对应的崩溃所在的函数堆栈显示,还有对应的崩溃在哪一行的定位,大部分情况下就已经足够我们找到崩溃原因了。
崩溃所对应源码位置
WinDbg的一些常用命令说明
WinDbg的命令如果是.开头的表示这个命令是一个配置命令,如果是!开头的则表示这是一个扩展命令
符号文件路径设置命令
- .sympath:显示当前符号文件查找路径
- .sympath cache*<路径>:设置缓存路径,不指定具体路径则使用默认的
- .sympath cache*<路径>;srv*:设置符号文件下载路径,不指定则用默认的(https://msdl.microsoft.com/download/symbols)
- .sympath <路径>;cache*;srv*:设置多个查找路径组合
- .reload:如果重新设置了路径,那么用这个命令重新进行符号文件的查找
网友评论