为什么 addr2line 只适用于函数

发布于 2024-11-27 09:50:45 字数 523 浏览 0 评论 0原文

我有 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 的输出来生成有关文件或模块使用多少内存大小的详细信息(而不是“size”工具报告的全局数字)。

I've got addr2line working for function addresses:

$ nm -S executable | grep main
08048742 000000a0 T main
$ addr2line -e executable 08048742
/home/blablabla/src/main.c:80

Unfortunately it only works if I supply an address of a function, when passing an address of a data symbol (e.g. the address of a crc table) it can never resolve the file/line number:

$ nm -S executable | grep tableCRC
080491bc 00000200 r tableCRC
$ addr2line -e executable 080491bc
??:0

I guess that that kind of debug information just isn't included for data because this feature is probably intended for analyzing backtraces, but maybe there's a compiler/linker option to force this?

I want to use the output of addr2line to generate detailed information about how much memory size a file or module uses (instead of the global number reported by the 'size' tool).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

世界等同你 2024-12-04 09:50:45

nm--print-size--line-numbers 选项可能就是您正在寻找的。

请注意,ELF 对象需要包含 --line-numbers 选项才能工作的调试信息。

The --print-size and --line-numbers options to nm are probably what you are looking for.

Please note that the ELF object needs to contain debugging information for the --line-numbers option to work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文