[√]调试信息标准符号:DWARF

简介: [√]调试信息标准符号:DWARF

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

image.png

  • .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

目录
相关文章
|
存储 NoSQL 安全
【C++调试】深入探索C++调试:从DWARF到堆栈解析
【C++调试】深入探索C++调试:从DWARF到堆栈解析
949 1
|
10月前
|
算法 Go
Go 语言泛型 — 泛型语法与示例
本文详解 Go 语言泛型语法与使用示例,涵盖泛型函数、类型声明、类型约束及实战应用,适合入门学习与开发实践。
|
Web App开发 移动开发 前端开发
如何解决不同浏览器的样式兼容性问题?
如何解决不同浏览器的样式兼容性问题?
959 0
|
Rust 编译器
|
网络架构 CDN
|
UED 索引
震惊!大文件上传也能如此丝滑?揭秘断点续传黑科技,让你的文件传输快如闪电,再也不用担心中断烦恼!
【8月更文挑战第4天】互联网的发展使大文件上传成为应用常见需求,但易受网络等因素影响中断。断点续传技术将文件分块,每块独立上传,若中断可续传未完成部分,提升效率和体验。实现包括文件分块、初始化上传、逐块上传与校验、服务器合并文件,及处理续传逻辑。通过客户端与服务器协作,优化上传流程,适应网络波动,确保数据完整性。随着技术进步,断点续传方案将更高效可靠。
1038 13
|
前端开发 JavaScript UED
前端性能优化:打造流畅用户体验的秘诀
【10月更文挑战第20天】前端性能优化:打造流畅用户体验的秘诀
325 0
|
存储 SQL 运维
Oracle--活跃回滚段损坏故障恢复
当前数据库由活跃事务时活跃回滚段损坏无备份时处理过程。
579 0
理解汇编中的CALL指令和参数传递
理解汇编中的CALL指令和参数传递
921 1
|
安全 编译器 API
C++系统日志库精选:深入剖析glog与log4cplus,轻松搭建高效日志系统
C++系统日志库精选:深入剖析glog与log4cplus,轻松搭建高效日志系统
2604 0

热门文章

最新文章