转载时请注明出处和作者联系方式:
http://blog.csdn.net/mimepp
ARM系统中, 当crash发生时的back trace调试输出
作者:余涛(yut616_at_sohu.com)
关键字:一般保护错
back trace
在ARM target board上, 如果发生异常,如内存访问越界等情况,有时会非常难debug到底是哪里出错,近来看了一下back trace回溯的功能及实现,在这里做个笔记。
首先,back trace要涉及到一堆寄存器, 不过不用担心, 实际上没你想象的那么难。
在linux kernel的代码中可以看到关于ARM寄存器的定义,在这里列一下:
linux / include / asm - arm / proc - armv / ptrace.h
linux / include / asm - arm / proc - armv / ptrace.h
struct
pt_regs
{
long uregs[18];
} ;
#define ARM_cpsr uregs[16] // 当前程序状态寄存器
#define ARM_pc uregs[15] // 程序计数器 指令计数器,下一条将要执行的指令
#define ARM_lr uregs[14] // 链接link寄存器,是退出时要装载到pc中的值,返回回来时就是到这个里面去执行之前的代码
long uregs[18];
} ;
#define ARM_cpsr uregs[16] // 当前程序状态寄存器
#define ARM_pc uregs[15] // 程序计数器 指令计数器,下一条将要执行的指令
#define ARM_lr uregs[14] // 链接link寄存器,是退出时要装载到pc中的值,返回回来时就是到这个里面去执行之前的代码