我已经使用addr2line
来处理函数地址:
$ nm -S executable | grep main
08048742 000000a0 T main
$ addr2line -e executable 08048742
/home/blablabla/src/main.c:80
不幸的是,只有在我提供函数地址的情况下它才有效,当传递数据符号的地址(例如crc表的地址)时,它永远无法解析文件/行号:
$ nm -S executable | grep tableCRC
080491bc 00000200 r tableCRC
$ addr2line -e executable 080491bc
??:0
我猜想这种类型的调试信息只是不包含在数据中,因为此功能可能旨在分析回溯,但是也许有一个编译器/链接器选项可以强制执行此操作?
我想使用
addr2line
的输出来生成有关文件或模块使用多少内存大小的详细信息(而不是“大小”工具报告的全局数量)。 最佳答案
您可能正在寻找 nm 的--print-size
和--line-numbers
选项。
请注意,ELF对象需要包含调试信息才能使--line-numbers
选项起作用。
关于c - 为什么仅对函数使用addr2line,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6923067/