我是 arm 架构的新手,我从事嵌入式软件工作,并试图了解我的项目二进制调试文件夹中存在的 .axf 文件。
发现它是链接器在构建过程中生成的arm可执行格式文件,用于调试崩溃。所以很明显它包含一些调试信息,但不清楚那是什么信息?并且在调试文件夹中也存在一个 .map 文件,那么这两个文件有什么区别呢?
AXF 文件是由 ARM 的 RealView 编译器(也是 Keil 的 ARM-MDK 的一部分)生成的目标文件格式,包含目标代码和调试信息。在调试器中,虽然只在目标本身上加载目标代码,但代码和调试信息都加载到开发主机的内存中。
当通过 JTAG、SWD 或其他连接进行调试(任何类型的 - 不仅仅是崩溃)时,主机上需要提供代码以及将该代码与原始源代码相关联的调试信息。通过调试连接,只有极少的数据(例如寄存器值)被传输,例如,调试器将获取程序计数器值,并能够使用 AXF 中的调试数据显示主机上可用的汇编程序和源代码。
MAP 文件包含一些相同的信息,但它旨在用于人类可读性和消费而不是机器使用,并且不包含源代码级调试器所需的目标代码关联数据的源代码行。
大多数情况下你可以忽略它——编译器生成它,调试器加载它。您的工具链可能还会生成一个 .hex 文件,该文件是您用于生产编程的文件,其中仅包含机器代码和常量数据以及初始化程序。