【发布时间】:2016-04-02 02:07:52
【问题描述】:
我们正在开发 STM32F103(ARM Cortex M3)芯片,并使用 uVersion(ARM-MDK 编译器)编译我们的项目。当崩溃发生时,我们保存了 PC 和 LR 寄存器。之后,我们想通过编写某些脚本将保存在 PC 和 LR 寄存器中的地址映射到源代码行以供人类阅读。我读了这个What are .axf files?,上面说axf 包含这样的信息。但我不知道如何使用它。 非常感谢。
[更新 1]
今天试了一下fromelf.exe,它可以dump一些调试有用的信息(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 [
当我搜索崩溃的PC地址(0x080043d0)时,我可以找到它对应的源行,虽然我没有找到这次崩溃的LR地址的源行。
那么我可以使用 fromelf.exe 来解决我的问题吗?
【问题讨论】:
-
我不了解 ARM-MDK,但 gcc 工具链具有用于此目的的“addr2line”实用程序。你的工具链很可能有类似的东西。 Addr2line 需要带有调试信息的 .elf 文件。 .axf 似乎与带有调试的 .elf 文件相同。
标签: arm embedded stm32 keil cortex-m