0

我正在开发一些诊断工具来帮助定位嵌入式 ARM 平台上的内存问题。由于内存限制,我无法为单元本身的所有库加载所有符号。我需要保存哪些信息才能稍后在另一台机器上解析符号?

我将解析符号的机器是 x86 机器,它具有交叉工具链和 gdb 以及所需的所有符号包。我将使用什么来从我保存在诊断输出中的这些信息中批量解析符号?是否有用于解析的库或 API?

4

1 回答 1

0

以下信息与 Android 相关。其中一些部分也被编译为 ARM 架构的 ELF 文件,因此它可能对您的情况有用。

构建过程如下所示:

  1. 一切都是用调试信息编译的 ( gcc -g ...)
  2. 然后将所有二进制文件剥离并打包到系统映像中。但是每个二进制文件的原始未剥离版本仍保留在构建目录中。
  3. 系统映像在目标设备上闪烁。

因此,要从诊断输出中解析符号,您可以使用arm-linux-androideabi-addr2line. 例子:

${CROSS_COMPILE}addr2line --demangle -f -e PATH_TO_NOT_STRIPPED_BINARY ADDRESS

可以在这个问题中找到其他信息:如何使用 addr2line

我还准备了一个非常简单的 python 脚本来自动化这个过程:decode_callstack.py(它适用于 Android 诊断输出,您需要在使用前更改 PREFIX 变量)

于 2013-01-25T10:19:59.407 回答