当前位置:网站首页>pdb符号库文件详解
pdb符号库文件详解
2022-06-29 12:36:00 【dvlinker】
目录
3、Process Explorer和Process Monitor也要用到pdb文件
C++软件异常排查从入门到精通系列教程(专栏文章列表,欢迎订阅,持续更新...)
https://blog.csdn.net/chenlycly/category_11397492.html 我们在使用工具去分析C++软件异常时,需要用到pdb文件。不仅Windbg和IDA反汇编工具需要用到pdb文件,有时使用Process Explorer和Process Monitor也会用到pdb文件,今天我们就来详细讲述一下pdb的相关内容。

1、概述
PDB-Program Databse File,程序数据库文件,存放了二进制文件中所有函数及变量的符号,还有一些调试用的信息,要查看完整的函数调用信息及变量信息,都需要用到pdb文件。pdb文件是在编译工程时产生的,它是和对应的模块(exe或dll)一起生成出来的。在Visual Studio中,不管是Debug还是Release下默认都会生成pdb文件,相关的配置选项如下:

本地程序之所以能调试,是因为其二进制文件中在本地编译生成时会自动写入对应的pdb文件的绝对路径,而pdb文件中存放着用于调试的各种调试信息,启动调试时调试器会根据文件中记录的pdb文件路径去加载pdb文件,去获取pdb文件中的调试信息。如果手动将pdb删除,在没有重新生成的情况下,肯定是无法调试的。
2、Windbg和IDA反汇编工具要用到pdb文件

Windbg和IDA都需要使用pdb文件。
Windbg要查看函数调用堆栈中的具体的函数及变量信息,所以需要使用到pdb文件。需要在windbg中去手动配置pdb文件的路径。IDA反汇编工具在打开二进制文件解析汇编代码时,如果有pdb文件,会显示具体的函数名,也会根据pdb中的调试信息在汇编代码中添加一些注释(有了这些注释,有利于阅读汇编代码)。
对于IDA,只需将pdb文件放置在目标二进制的同级目录中,IDA会从目标二进制文件所在的目录中搜索对应的pdb文件,去自动加载。
3、Process Explorer和Process Monitor也要用到pdb文件

除了Windbg和IDA之外,Process Explorer和Process Monitor两个工具有时也需要使用到pdb文件。比如在双击条目查看线程的函数调用堆栈时,如果有pdb文件,函数调用堆栈中会显示详细的函数名称,这样更有利于查看。对于这两个工具,和IDA一样,只需要将pdb文件放在目标程序的统计目录中,工具会去自动加载。
4、pdb时间戳与pdb文件名称
在使用pdb文件时,有两点需要注意一下,一个是pdb文件的时间戳,一个是pdb文件的名称。
加载pdb文件时会严格校验pdb文件的时间戳(就是生成pdb文件的时间),必须要和二进制文件完全一致。即使是同样的代码,没有修改任何代码,在不同时间点编译生成的pdb文件,也是不能交叉使用的。
pdb文件的名称必须和工程的名称一致,否则也是无法加载的。比如某个工程名称为videocodec_hp.vcxproj,生成的pdb文件的名称默认应为videocodec_hp.pdb(不区分大小写的),但在执行文件拷贝时将文件名称改成videocodec.pdb,这种情况下Windbg也是无法加载的。必须手动将文件名改成工程名后,才能正常加载。
这个问题我们遇到过几次,就是因为pdb文件名称与工程名称不一致导致的。
5、Windbg中pdb符号文件路径配置
点击Windbg菜单栏中的File -> Symbol File Path ...,打开设置pdb文件路径的窗口,如下所示:

一般我们设置如下格式的pdb组合文件路径
C:\Users\Administrator\Desktop\pdbdir;srv*f:\mss0616*http://msdl.microsoft.com/download/symbols
这么个一长串组合路径主要由下面三个路径构成:(路径之间使用分号隔开)
1)应用程序库pdb文件路径(非系统库):
C:\Users\Administrator\Desktop\pdbdir。我们开发的模块的pdb文件集中拷贝到该路径中,路径名称可以随意选择。
2)本地安装的Windows系统库pdb文件路径:
f:\mss0616,可以到微软官网上下载和Windows系统一致的系统符号库安装包,这个路径就是本机上安装系统pdb的路径。此时安装的系统pdb库是与我们当前系统对应的pdb,但在分析崩溃时dump文件是在在其他机器上产生的,对应模块的pdb是其他机器上安装系统的pdb,那我们本地安装的pdb就用不上了。现在微软官方已经取消了系统pdb文件的下载,统一使用下面给出的微软提供的在线系统pdb服务器地址。
3)Windows系统库在线下载路径:
http://msdl.microsoft.com/download/symbols,这是微软提供的在线系统pdb文件下载服务器,如果设置了该地址,Windbg会自动连接该服务器,去自动下载与当前dump文件中用到的系统库版本一致的pdb文件。但这里需要注意一下,有时微软这个服务器会有连接不上或卡顿的情况,会直接导致windbg卡顿。所以遇到windbg比较安顿的时候,可以先将该地址删除掉。但有时我们需要设置该在线地址,因为有时我们想去看到底是调用了系统库中的那个接口出发的崩溃。
边栏推荐
- Hystrix circuit breaker
- ZALSM_ EXCEL_ TO_ INTERNAL_ Solving the big problem of importing data from table
- Equidistant segmentation of surface rivers in ArcGIS [gradient coloring, pollutant diffusion]
- PyGame flips the image
- GEE——美国LANDFIRE火灾数据集
- *Clock in algorithm *leetcode 146 Analysis of LRU cache algorithm
- Can I open an account online? Is it safe
- Acwing 234 abandoning testing
- 趣谈网络协议(二)传输层
- Cvpr2022 𞓜 future transformer with long-term action expectation
猜你喜欢

云原生(三十一) | Kubernetes篇之Kubernetes平台基本预装资源

The role of each part of Neural Network & thoroughly understand neural network

Evaluation of powerful and excellent document management software: image management, book management and document management

3D model downloading and animation control

Cvpr2022 | a convnet for the 2020s & how to design neural network Summary

CVPR2022 | A ConvNet for the 2020s & 如何设计神经网络总结

服务器监控netdata面板配置邮件服务

C语言内存函数

Acwing 234 abandoning testing

Cvpr2022 | panopticdepth: a unified framework for depth aware panoramic segmentation
随机推荐
Acwing 234 abandoning testing
SCHIEDERWERK电源维修SMPS12/50 PFC3800解析
Force buckle: merging two ordered linked lists
RT thread memory management
@Table burst red
PyGame accurately detects image collision
STK_GLTF模型
win32版俄罗斯方块(学习MFC必不可少)
CVPR2022 | 长期行动预期的Future Transformer
Detailed explanation on configuration and commissioning of third-party servo of Beifu TwinCAT -- Taking Huichuan is620n as an example
GEE——美国LANDFIRE火灾数据集
Write a shell script to find the "reverse order" of a number“
Solution to inconsistency between RTC time and world time on the server
UI file introduction in QT
matplotlib的imshow函数显示灰度图像要设置vmin和vmax2个参数
Record the process of a solid-state update and system migration debug
C # realizes the first order traversal, middle order traversal and second order traversal of binary tree
Cvpr2022 𞓜 loss problem in weakly supervised multi label classification
3D model downloading and animation control
揭秘!付费会员制下的那些小心机!