符号文件

符号文件介绍

链接应用程序、库、驱动程序或操作系统时,创建 .exe 和 .dll 文件的链接器还会创建多个称为 符号文件 的附加文件。

符号文件保存多个数据,这些数据在运行二进制文件时实际上并不需要,但在调试过程中可能非常有用。

通常,符号文件可能包含:

  • 全局变量

  • 局部变量

  • 函数名称和其入口点的地址

  • 帧指针省略 (FPO) 记录

  • 源行号

其中每个项分别称为一个 符号。 例如,单个符号文件 Myprogram.exe 可能包含几百个符号,包括全局变量和函数名以及数百个局部变量。 通常,软件公司会发布每个符号文件的两个版本:包含 公共符号 和 私有符号 的完整符号文件,以及减少的 (去除只包含公共符号) 文件。 有关详细信息,请参阅 公共和私有符号

调试时,必须确保调试器能够访问与正在调试的目标关联的符号文件。 实时调试调试崩溃转储文件都需要符号。 你必须获取要调试的代码的正确符号,并将这些符号加载到调试器中。

Windows 符号

Windows 在扩展名为 .pdb(program database,程序数据库) 的文件中保留其符号。

编译器和链接器控制符号格式。 Visual C++ 链接器会将所有符号置于 .pdb 文件中。

Windows 操作系统内置于两个版本中。 免费生成 (或 零售版本) 具有相对较小的二进制文件,并且已 检查的生成 (或 调试版本) 具有更大的二进制文件,代码本身中的调试符号更多。 在 Windows 10 版本1803之前,已检查的生成在 windows 的早期版本上可用。 其中每个生成都有自己的符号文件。 在 Windows 上调试目标时,必须使用与目标上的 Windows 生成匹配的符号文件。

下表列出了标准 Windows 符号树中存在的几个目录:

WINDOWS 符号
Directory包含的符号文件

ACM

Microsoft 音频压缩管理器文件

COM

可执行文件 ( .com)

CPL

控制面板程序

DLL

动态链接库文件 ( .dll)

WINSPOOL.DRV

( 的驱动程序文件。 winspool.drv)

EXE

可执行文件 ( .exe)

SCR

屏幕保护程序文件

SYS

驱动程序文件 ( .sys)

符号路径

符号路径指定 Windows 调试器(WinDbg、KD、CDB、NTST)查找符号文件的位置。 有关符号和符号文件的详细信息,请参阅符号

一些编译器(如 Microsoft Visual Studio)将符号文件与二进制文件放在同一目录中。 符号文件和选中的二进制文件包含路径和文件名信息。 此信息通常使调试器能够自动查找符号文件。 如果要在生成可执行文件的计算机上调试用户模式进程,并且符号文件仍在其原始位置,则调试器可以在不设置符号路径的情况下定位符号文件。

在大多数其他情况下,必须将符号路径设置为指向符号文件位置。

调试器的符号路径是由多个目录路径组成的字符串,用分号分隔

支持相对路径。 但是,除非始终从同一目录启动调试器,否则应在每个路径之前添加驱动程序号或网络共享。 还支持网络共享。

对于符号路径中的每个目录,调试器将在三个目录中查找。 例如,如果符号路径包含 c:\MyDir 目录,并且调试器正在查找 DLL 的符号信息,则调试器依次查找 c:\MyDir\symbols\dll``c:\MyDir\dll``c:\MyDir。 然后,调试器对符号路径中的每个目录重复此过程。 最后,调试器在当前目录中查找,然后在当前目录中附加 ..\dll。 (调试器将附加 ..\dll..\exe 或 ..\sys,具体取决于正在调试的二进制文件。)

符号文件具有日期和时间戳。 不必担心调试器会使用首先在此序列中找到的错误符号。 它始终查找与正在调试的二进制文件上的时间戳匹配的符号。 有关符号文件不可用时的响应的详细信息,请参阅补偿符号匹配问题

设置符号路径的一种方法是输入 .sympath 命令 。 有关设置符号路径的其他方法,请参阅本主题后面的控制符号路径

符号服务器

微软提供系统文件的调试符号文件,需要另行下载。

有了这些符号文件,在调试程序的时候,就能看到user32.dll,gdi32.dll等一系列文件的函数名称,否则就显示user32.dll.0x67003246这样的入口地址,

服务器地址:http://msdl.microsoft.com/download/symbols

使用方法:

打开VS2003以上的版本,在调试程序的时候,点击“模块”窗口,可以依次点击模块,右键,加载符号.

还可以直接把同名的pdb文件,放到dll相同的目录,Visual Studio就会自动加载.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顺其自然~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值