为什么只为函数使用addr2line

Bar*_*art 6 c debugging elf

我已经addr2line为函数地址工作了:

$ nm -S executable | grep main
08048742 000000a0 T main
$ addr2line -e executable 08048742
/home/blablabla/src/main.c:80
Run Code Online (Sandbox Code Playgroud)

不幸的是,它仅在我提供函数的地址时才有效,当传递数据符号的地址(例如crc表的地址)时,它永远无法解析文件/行号:

$ nm -S executable | grep tableCRC
080491bc 00000200 r tableCRC
$ addr2line -e executable 080491bc
??:0
Run Code Online (Sandbox Code Playgroud)

我猜这种调试信息不​​包含在数据中,因为这个功能可能用于分析回溯,但是可能有一个编译器/链接器选项来强制这个?

我想使用输出addr2line来生成有关文件或模块使用的内存大小的详细信息(而不是'size'工具报告的全局编号).

jko*_*shy 5

--print-size--line-numbers期权纳米可能是你在找什么.

请注意,ELF对象需要包含要使用的--line-numbers选项的调试信息.