我正在开发运行Linux的ARM9E处理器。有时我的应用程序崩溃时会显示以下消息:
[142.410000]对齐陷阱:rtspserverd(996)PC = 0x4034f61c Instr = 0xe591300c地址= 0x0000000d FSR 0x001
如何将PC地址翻译成实际的源代码?换句话说,我怎样才能理解这条消息呢?
答案 0 :(得分:4)
objdump。转储您的可执行文件,然后搜索4034f61c:
。
-x
,--disassemble
和-l
选项特别有用。
答案 1 :(得分:2)
您可以打开编译器中的列表并告诉链接器生成映射文件。映射文件将为您提供绝对地址的含义,直到出现问题的函数,而列表将帮助您确定函数中异常的确切位置。
例如,gcc
你可以做
gcc -Wa,-a,-ad -c foo.c > foo.lst
在文件foo.lst
中生成列表。
-Wa,
将以下选项发送给汇编程序(gas
)。
-a
告诉gas
生成标准输出列表。
-ad
告诉gas
省略调试指令,否则会增加很多混乱。
GNU链接器生成映射文件的选项是-M
或--print-map
。如果您与gcc
链接,则需要使用以-Wl,
开头的选项将选项传递给链接器,例如-Wl,-M
。
或者您也可以在调试器中运行您的应用程序(例如gdb
),并使用bt
命令查看崩溃后的堆栈转储。