通过Jlink仿真器找出程序跑飞位置
1、通过仿真器连接电脑,并点击J-LINK Commandcr按钮(在JLINK安装后的SEGGER目录下)
2、再打开的窗口中输入usb,则J-LINK就能访问目标板;
3、接下来输入?,就可以查看J-LINK所支持的控制命令列表,如下
输入h命令:对应他是让内核停止工作,当遇到跑飞是,通过该命令,就可以看到当前PC指针位置,从而知道程序在哪里运行失效,如下
锁定位置后通过PC指针通过以下2个查找当前跑飞位置
方法1:通过.axf文件精确定位程序跑飞位置
在附件中打开压缩包,进入路径:cmbacktrace-master\tools\addr2line找到自己系统的对应软件,将软件拖到程序输出.axf文件的位置,然后启动PowerShell窗口,输入以下指令后回车:
.\addr2line.exe -e .\xxx.axf 0x0815E0A4
注意:0x0815E0A4是PC指针地址
就会打印出程序在什么位置跑飞。
方法2:通过 .map文件定位程序跑飞大致位置
打开编译输出的.map文件,搜索PC指针指向地址的前四位字符串找到需要执行的指令附近,然后再往下找到处前一个地址小于PC指针,后一个地址大于PC指针,就可以确定程序中在哪个函数中跑飞的啦,如下图(下图还是以PC指针为"0x0815E0A4"为例):
附件:addr2line软件下载链接