debugging - 需要帮助了解 DW_AT_ranges 值
问题描述
以下所有内容都是通过 dwarfdump 获得的。
我有以下 DIE(其中一个显示对内联函数 foo 的调用):
0x0004076c: DW_TAG_inlined_subroutine
DW_AT_ranges (0x00002730
[0x0000000000a5cda7, 0x0000000000a5cdb0)
[0x0000000000a5cdb5, 0x0000000000a5ce50))
DW_AT_abstract_origin (0x00040817 "foo")
DW_AT_call_line (154)
DW_AT_call_column (0x09)
DW_AT_call_file ("file.C")
所以这告诉我foo
在第 154 行的 file.C 中调用了函数,这是正确的。有 2 个条目foo
(不知道为什么一个是内联的,另一个不是)。他们是:
0x00040817: DW_TAG_subprogram
DW_AT_decl_line (172)
DW_AT_decl_file ("file.C")
DW_AT_declaration (0x01)
DW_AT_name ("foo")
DW_AT_MIPS_linkage_name ("foo")
DW_AT_external (0x01)
DW_AT_inline (DW_INL_declared_inlined)
和
0x00040deb: DW_TAG_subprogram
DW_AT_decl_line (172)
DW_AT_decl_file ("file.C")
DW_AT_declaration (0x01)
DW_AT_MIPS_linkage_name ("foo")
DW_AT_name ("foo")
DW_AT_external (0x01)
确实foo
是file.C
在第 172 行定义的。这个函数的第一行是 174。如果我查看 debug_line 部分(通过 objdump --dwarf=decodedline)和第 174 行的 grep,我得到以下信息:
file.C 174 0x4ffaf7
file.C 174 0x4ffbb7
file.C 174 0x4ffc77
file.C 174 0x1fa72f7
file.C 174 0x1fa73b7
file.C 174 0x1fa7477
file.C 174 0xa04897
file.C 174 0xa04957
file.C 174 0xa04a17
file.C 174 0x52e6d7
file.C 174 0x52e797
file.C 174 0x52e857
我本来希望在范围值中至少看到其中一个地址。如果我必须做一些额外的算术才能使它有意义,我不确定出了什么问题。任何帮助,将不胜感激。
解决方案
推荐阅读
- linux - bash 不理解 .vimrc 的语法
- html - 如何防止 div 的位置在调整屏幕大小时发生变化
- javascript - Vue FontAwesome 图标在计算上不会改变
- nginx - 如何在 nginx 中将 ip 重定向到 https 域
- javascript - 使用可恢复的上传 url 在 React js 中上传文件在谷歌云存储中失败,引发 CORS 策略错误
- html - 物化网格列溢出
- r - 无法打印我需要的所有 ggplot 图表
- javascript - ForeEach 在迭代空值对象的键数组时产生错误
- xcode - 不推荐使用 XCodeGLKit 的警告考虑迁移到 Metal 而不是 Apple 电子邮件 不推荐使用 API 使用,使用 WKWebView 而不是 UIWebView
- r - 分组以在 data.table 中形成多个以逗号分隔的列