我正在开发一些诊断工具来帮助定位嵌入式 ARM 平台上的内存问题。由于内存限制,我无法为单元本身的所有库加载所有符号。我需要保存哪些信息才能稍后在另一台机器上解析符号?
我将解析符号的机器是 x86 机器,它具有交叉工具链和 gdb 以及所需的所有符号包。我将使用什么来从我保存在诊断输出中的这些信息中批量解析符号?是否有用于解析的库或 API?
我正在开发一些诊断工具来帮助定位嵌入式 ARM 平台上的内存问题。由于内存限制,我无法为单元本身的所有库加载所有符号。我需要保存哪些信息才能稍后在另一台机器上解析符号?
我将解析符号的机器是 x86 机器,它具有交叉工具链和 gdb 以及所需的所有符号包。我将使用什么来从我保存在诊断输出中的这些信息中批量解析符号?是否有用于解析的库或 API?
以下信息与 Android 相关。其中一些部分也被编译为 ARM 架构的 ELF 文件,因此它可能对您的情况有用。
构建过程如下所示:
gcc -g ...
)因此,要从诊断输出中解析符号,您可以使用arm-linux-androideabi-addr2line
. 例子:
${CROSS_COMPILE}addr2line --demangle -f -e PATH_TO_NOT_STRIPPED_BINARY ADDRESS
可以在这个问题中找到其他信息:如何使用 addr2line。
我还准备了一个非常简单的 python 脚本来自动化这个过程:decode_callstack.py(它适用于 Android 诊断输出,您需要在使用前更改 PREFIX 变量)