使用 addr2line 分析 ZigBee JN516x 的 crash stack dump
大家好,我是宇宙洪荒,是专业研究 NXP-ZigBee 的洪荒开拓者。今天给大家带来的是 addr2line。在内核执行过程中偶尔出现崩溃时,addr2line 可用于快速定位出出错的位置,进而找出代码 bug。期待该次分享能帮助到大家。
一、addr2line 是什么
addr2line (它是标准的 GNU Binutils 中的一部分)是一个可以将指令的地址和可执行映像转换成文件名、函数名和源代码行数的工具。
二、如何获得 addr2line
Linux 系统一般会集成这个工具,本文重点介绍 Windows 系统下如何获取该工具。方法很多,我这里仅介绍两种方式 第一种:安装 MinGW(网上教程很多,自行搜索),安装后在其安装目录的 bin 文件夹里会包含 addr2line.exe ,此时只用保证环境变量 path 中包含该路径即可。 第二种:本博文档案下已存放 addr2line.exe ,可以将其直接拷贝至 C:\NXP 下。
三、addr2line 如何使用
- 执行 Window + R 命令,输入 cmd ,如下:
- 进入 C:\NXP,输入 exe -help 可以看到如下介绍:
这里常用的是以下参数
- -e :指定可执行映像名称
- -a :显示函数地址
- -f :显示函数名称
例如命令 addr2line -e sample.axf -a -f 6000243d 60002f49 将会显示名称为 sample.elf 的可执行映像,在地址为 6000243d 60002f49 对应的函数名称及源代码信息。执行结果如下: C:\NXP>addr2line.exe -e C:\Users\54500\Desktop\i.MXRT106X_John_20210430\project\Objects\sample.axf -f 6000243d 60002f49 ACMP1_IRQHandler C:\Users\54500\Desktop\i.MXRT106X_John_20210430\project/../devices/arm/startup_MIMXRT1062.S:319 BOARD_InitDebugConsole C:\Users\54500\Desktop\i.MXRT106X_John_20210430\project/../board/board.c:44
四、通过 addr2line 分析ZigBee JN516x 的crash stack dump
当 JN516x crash 后,将在串口打印输出调用栈信息,通过这些信息可以分析定位出现问题的函数。 APP: Light Power Up EPCR = a9a2d : EEAR = 7 Stack dump: 4007ec0 : ffffffff 4007ec4 : 000ab3dc 4007ec8 : 00000000 4007ecc : 000af718 4007ed0 : 0000fffe 4007ed4 : 0000000c 4007ed8 : 000ab3d6 4007edc : 04000960 4007ee0 : 00000000 4007ee4 : ffffffff
五、ZigBee 参考资料
参考文档: 通过 addr2line 分析 ZigBee JN516x 的 crash stack dump.pdf
|