更新

2024-07-05 本书已经出版 image 由于本库的草稿是我之前一个人写的,所以质量和正确性都不如经过两位作者和出版社编辑审阅和校正过的书稿。 如果你想阅读更加完善的版本,推荐购买正版书籍。

调试符号

调试符号是和相关的机器码、全局数据对象等等一起由编译器生成的。接着它们被链接器收集和组织,写入到可执行文件(大部分UNIX平台)的调试section或者是一个单独的文件(Windows程序数据库,或者pdb文件)。一个源码级别的调试器为了理解一个进程的内存镜像如一个程序的运行实例,需要从它的仓库里面读取调试符号。

在它的众多特性中,一个调试符号可能关联一个进程的指令和对应的程序源码行数或者表达式;或者从源程序声明的结构化数据对象角度,描述一块内存。有了这些映射,一个调试可以在源码层面,执行用户的命令来查询和操作进程。比如,一个在特定源代码行的断点会被翻译为一个指令的地址;一块内存会被标记为在源代码语言上下文的变量,可以被格式化为它的声明类型。简而言之,调试符号构建了高维度程序源码和运行着程序原始内存内容的桥梁。