如何在arm平台上调试随机数据中止问题

随着基于ARM的项目的开发,我们随机获取数据,也就是当我们使用它时,我们得到数据中止中断。 但是当我们使用r14或r13检查寄存器映射时,数据中止并不总是在同一点,即使检查函数回调。 无论如何,我可以准确地获取有关数据中止的根本原因的信息吗? 我已经尝试了ref 2,但是当我捕获有关中断的数据时却无法得到相同的结果。

相关ARM数据中止错误exception调试 ARM:如何分析 数据中止exception

按照上面Keil链接中的说明检查链接寄存器(r14)将显示触发数据中止的指令。 从那里你必须弄清楚为什么它会触发数据中止以及如何发生这种情况,这是困难的部分。

根据我的经验,最有可能发生的是您访问了无效指针。 由于许多原因,它可能无效。 以下是一些候选人:

  1. 您在初始化之前使用了指针
  2. 你使用了它之后的指针,或者已经释放了包含内存(并且在另一个函数分配它时随后被修改)
  3. 指针被堆栈溢出损坏
  4. 指针被其他不相关的,行为不端的代码破坏了内存
  5. 指针在堆栈上作为局部变量分配,然后在分配函数退出后使用
  6. 指针的类型对齐方式不正确(例如,尝试以uint32_t的forms访问0x4001)

如您所见,许多事情可能是ARM数据中止的根本原因。 找到根本原因是ARM软件/固件开发变得如此有趣的部分原因! 祝你好运找出你的谜题。