DWARF(Debugging With Attributed Record Formats)是一种用于调试信息的标准格式和API,通常与编译器一起使用。它提供了一种有效的方法来生成、存储和访问程序符号和调试信息,这些信息可以在程序崩溃或其他错误情况下帮助程序员调试代码。
DWARF 通常以一种基于二进制的格式嵌入到可执行文件或库中。这些调试信息包含编译器产生的各种元数据,如变量名、类型和地址范围等。在调试时,调试器将使用 DWARF 数据来解释已编译程序的结构,并将程序在运行时的状态映射到源代码级别,使得程序员可以查看变量、函数和调用堆栈等信息。
通过命令:objdump -h xxx 可以看到调试信息在ELF文件中的位置,.debug_xxx的section段。
Usage: objdump <option(s)> <file(s)> Display information from object <file(s)>. At least one of the following switches must be given: -h, --[section-]headers Display the contents of the section headers
.debug_abbrev
.debug_info
部分中使用的缩写.debug_aranges
内存地址和编译之间的映射.debug_frame
调用帧信息.debug_info
包含DWARF调试信息项(DIE)的核心DWARF数据.debug_line
行号程序.debug_loc
位置说明.debug_macinfo
宏描述.debug_pubnames
全局对象和函数的查找表.debug_pubtypes
全局类型的查找表.debug_ranges
DIE引用的地址范围.debug_str
.debug_info
使用的字符串表.debug_types
类型说明
使用readelf查看section
readelf -p .debug_aranges libjni.so readelf: Warning: Section '.debug_aranges' was not dumped because it does not exist
但是我发现
objdump -W -j .debug_aranges libjni.so
就有
可能是我的这个so使用win平台编译导致的,我在Linux上用ndk编译的so都有这个section