原帖 | Jack | 2025-05-25 11:08 | 👍1 | 阅读约1
老师,LR存储的是函数的返回地址,即函数被调用完后的下一条指令地址。而PC存储的是下一条即将要执行的指令的地址,指令触发hardfault时,PC更新流程被打断,所以压栈的时候,栈中的PC指向的还是触发hardfault的指令地址(先考虑hardfault触发是同步的情况)。
那么栈回溯的时候,在栈中查找PC的值岂不是比查找LR的值能更快的找到有问题的代码位置?为什么作业参考以及知识星球的帖子里面都说的是查看LR的值?
答:
栈回溯的本质是通过栈帧来推出调用关系(完整操作步骤见 栈回溯学会了,总结一下:栈回溯解决的是HardFault类问题),LR是其中的依据,所以我们在栈回溯时主要依据LR来分析,但不代表只依靠LR,其他的寄存器依然可以作为辅助,比如PC,CPSR,hardfault report等寄存器。
相关笔记