【问题标题】:Why works addr2line only for functions为什么 addr2line 仅适用于函数
【发布时间】:2011-10-18 21:07:30
【问题描述】:

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

【问题讨论】:

  • 请记住,如果应用程序动态分配任何内存(这可能是任何非平凡应用程序的情况),那么基于这种分析的任何大小估计都不会很有用.
  • @Michael Mior:我正在使用它来分析具有 8K RAM 的微控制器的代码大小。 malloc 根本不存在。
  • 这肯定让生活更轻松 :)

标签: c debugging elf


【解决方案1】:

nm--print-size--line-numbers 选项可能正是您要找的。​​p>

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

【讨论】:

  • --line-numbers,我怎么会错过手册页中的内容。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 2011-11-18
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多