我们正在研究STM32F103(ARM Cortex M3)芯片并使用uVersion(ARM-MDK编译器)编译我们的项目。发生崩溃时,我们保存了PC和LR寄存器。之后,我们希望通过编写某些脚本将保存在PC和LR寄存器中的地址映射到人类阅读的源代码行。我读了这个What are .axf files?,其中说axf包含这样的信息。但我不知道如何利用它。 非常感谢。如何将ARM Cortex M3 PC/LR地址映射到源代码行?
[更新1]
今天,我试图其中可以转储一些调试有用信息的fromelf.exe(fromelf.exe --text -g E:\ proj_keil \ keil_output \ test.axf) 例如:
008f5d: SPECIAL(0, 1) : 13 080043cc: ..\init\main.c:23.5
008f5e: DW_LNS_negate_stmt : 06
008f5f: SPECIAL(1, 2) : 1a 080043d0: ..\init\main.c:24.5 [
当我搜索了崩溃的个人电脑地址(0x080043d0),我可以找到其对应的源代码行,虽然我没有找到这崩溃的LR地址的源代码行。
那么我可以用fromelf.exe来解决我的问题吗?
我不知道ARM-MDK,但gcc工具链有用于此目的的“addr2line”实用程序。你的工具链最有可能有类似的东西。 Addr2line需要调试信息的.elf文件。 .axf似乎与.elf一样的文件与调试.. – mkmk88