1. 实际使用中,多种调试信息格式,stabs, COFF, PE-COFF, OMF, IEEE-695, 以及DWARF。
2. stabs
stabs取名于symbol table strings,因为开始的时候,调试信息是以字符串的形式存储在Unix的a.out目标文件的符号表中。 stabs以字符串的形式编码程序的信息。最开始的时候,stabs很简单,但是后来变得越来越复杂,难解,而且不一致。此外,stabs没有形成标准,文档也不够详细。Sun Microsystem基于stabs作了大量扩展;GCC在对SUn的扩展进行反向工程的过程中,作了其它的扩展。stabs仍然被广泛使用。
3. COFF
COFF是Common Object File Format的缩写,源自Unix System V Release 3. COFF使用了很多别的调试格式,包括stabs。COFF最大的问题是变种很多,包括IBM RS/6000使用的XCOFF,MIPS和Alpha使用的ECOFF,以及Windows的PE-COFF。同样,COFF无论其目标模块格式还是其调试信息格式没有形成标准。
4. PE-COFF
PE-COFF是Microsoft Windows从Windows 95开始使用的目标模块格式。基于COFF格式,PE-COFF既使用了COFF的调试数据,也使用了Microsoft自有产权的Code View调试数据格式。文档既不完整也不容易获取。
5. OMF
OMF是Object Module Format的简称,使用于CP/M,DOS,OS/2,以及少量嵌入式系统。OMF只为调试器提供最基本的支持。
6. IEEE-695
IEEE-695是一个标准的目标模块和调试信息格式。最开始由Microsoft和HP在1980后期针对嵌入式环境共同提出,并于1900年成为IEEE标准。其特点是基于嵌套结构存储调试信息,能够更好地对应源代码的结构。虽然是IEEE标准,IEEE-695但是更像是有产权的格式。
7. DWARF
DWARF已经被广泛使用,包括GCC和LLVM。DWARF也是基于嵌套结构存储调试信息。
DWARF源于Unix System V Release 4中的C编译器以及sdb调试器。1989年的文档形成了DWARF 1。1900发布了DWARF 2的一个draft标准。随后,因为Motorola一个项目的失败,支持团队被解散。随后,DWARF 2的扩展泛滥,就有了各种各样的实现,没能形成最终标准。直到2006年发布的最终标准DWARF 3. 2010年发布了DWARF 4.
参考:
1. Michael J. Eager. Introduction to the DWARF Debugging Format. Feb. 2007.
2. http://dwarfstd.org.
【转自:http://blog.csdn.net/rrerre/article/details/6631173】