系统崩溃时如何从ARM寄存器获取信息

系统崩溃时如何从ARM寄存器获取信息,arm,stack-trace,trace,Arm,Stack Trace,Trace,先决条件: 我使用ARM11处理器、armcc-4.1编译器、threadx OS、T32作为调试器 我的目标处理器是ARM11,有时在系统崩溃后,操作系统会提供一些堆栈信息,对于一些崩溃,它显示如下: [20:44:54.6] Trap Class: 0xAAAA (HW DATAABORT TRAP) [20:44:54.6] System Stack: [20:44:54.6] 0x600DB570 [20:44:54.6] 0x00000000 [20:44:54

先决条件:

我使用ARM11处理器、armcc-4.1编译器、threadx OS、T32作为调试器

我的目标处理器是ARM11,有时在系统崩溃后,操作系统会提供一些堆栈信息,对于一些崩溃,它显示如下:

 [20:44:54.6]  Trap Class: 0xAAAA (HW DATAABORT TRAP)
 [20:44:54.6]  System Stack: 
 [20:44:54.6]   0x600DB570
 [20:44:54.6]   0x00000000
 [20:44:54.6]   0x00000000
 [20:44:54.6]   0x00000000
 [20:44:54.6]   0x00000000
 [20:44:54.6]   0x00000000
 [20:44:54.6]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.7]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.8]   0x00000000
 [20:44:54.9]   0x00000000
 [20:44:54.9]   0x00000000
 [20:44:54.9]   0x00000000
 [20:44:54.9]   0x600DB8A0
 [20:44:54.9]   0x600CF2E8
 [20:44:54.9]   0xE5920004
 [20:44:54.9]   0x60013C20
 [20:44:54.9]   0x602FF288
 [20:44:54.9]   0x00100000
 [20:44:54.9]   0xE5920000
 [20:44:54.9]   0x405C2184
 [20:44:54.9]   0x405C2184
 [20:44:55.0]   0x405C2184
 [20:44:55.0]   0x00000000
 [20:44:55.0]   0x00000195
 [20:44:55.0]   0x60013C20
 [20:44:55.0]   0x00000001
 [20:44:55.0]   0x00000000
 [20:44:55.0]   0x405C218C
 [20:44:55.0]   0x00093400
 [20:44:55.0]   0x00093478
 [20:44:55.0]   0x00093400
 [20:44:55.0]   0x00093478
 [20:44:55.0]   0x60000000
 [20:44:55.0]   0x00088DEC
 [20:44:55.0]   0x0632EA00
 [20:44:55.1]   0x00000000
 [20:44:55.1]   0x04300001
 [20:44:55.1]   0x04300001
 [20:44:55.1]   0x32200221
 [20:44:55.1]   0x21111291
 [20:44:55.1]   0x00033F0F
 [20:44:55.1]   0x0000704B
 [20:44:55.1]   0x04300001
 [20:44:55.1]   0x04300000
 [20:44:55.1]   0xFFFFFFFF
 [20:44:55.1]   0x0000F103
 [20:44:55.1]   0x60000000
 [20:44:55.2]   0x00088DEC
 [20:44:55.2]   0x0632EA00
 [20:44:55.2]   0x00000001
 [20:44:55.2]   0x35840C01
 [20:44:55.2]   0x34040001
 [20:44:55.2]   0x11000091
 [20:44:55.2]   0x11001111
 [20:44:55.2]   0x00033F0F
 [20:44:55.2]   0x0000704B
 [20:44:55.2]   0x04300001
 [20:44:55.2]   0x04300000
 [20:44:55.2]   0xFFFFFFFF
 [20:44:55.2]   0x00001903
 [20:44:55.2]   0x40000000
 [20:44:55.3]   0x00084E60
 [20:44:55.3]   0x0632EA00
 [20:44:55.3]   0x00000000
 [20:44:55.3]   0x04300001
 [20:44:55.3]   0x04300001
 [20:44:55.3]   0x22200211
 [20:44:55.3]   0x22101211
 [20:44:55.3]   0x00000909
 [20:44:55.3]   0x04300001
 [20:44:55.3]   0x04300000
 [20:44:55.3]   0xFFFFFFFF
 [20:44:55.3]   0xFFFFFFFF
 [20:44:55.4]   0x00020909
 [20:44:55.4]   0x0000F917
 [20:44:55.4]   0x00000004
 [20:44:55.4]   0x40000000
 [20:44:55.4]   0x00084E60
 [20:44:55.4]   0x0632EA00
 [20:44:55.4]   0x00000001
 [20:44:55.4]   0x16040C01
 [20:44:55.4]   0x04302001
 [20:44:55.4]   0x21301191
 [20:44:55.4]   0x11001291
 [20:44:55.4]   0x000009C9
 [20:44:55.5]   0x04300001
 [20:44:55.5]   0x04300000
 [20:44:55.5]   0xFFFFFFFF
 [20:44:55.5]   0xFFFFFFFF
 [20:44:55.5]   0x00020909
 [20:44:55.5]   0x00005013
 [20:44:55.5]   0x00000004
 [20:44:55.5]   0xEA000049
 [20:44:55.5]   0xE3A00003
 [20:44:55.5]   0xE5C20005
 [20:44:55.5]   0xE5C30005
 [20:44:55.5]   0xE1A00006
 [20:44:55.5]   0xEBFFE638
 [20:44:55.5]   0xEA000043
 [20:44:55.6]   0xE5D20002
 [20:44:55.6]   0xE3100020
 [20:44:55.6]   0x0A000005
 [20:44:55.6]   0xE3A00009
 [20:44:55.6]   0xE5C20005
 [20:44:55.6]   0xE5C30005
 [20:44:55.6]   0xE1A00006
 [20:44:55.6]   0xEBFFE62F
 [20:44:55.6]   0xEA00003A
 [20:44:55.6]   0xE3A04016
 [20:44:55.6]   0xEA000038
 [20:44:55.6]   0xE3A04016
 [20:44:55.7]   0xEA000036
 [20:44:55.7]   0xE3A0400B
 [20:44:55.7]   0xEA000034
 [20:44:55.7]   0xE3550000
 [20:44:55.7]   0x0A000008
 [20:44:55.7]   0xE3550001
 [20:44:55.7]   0x0A000001
 [20:44:55.7]   0xE3550002
 [20:44:55.7]   0x1A00002D
 [20:44:55.7]   0xE5D20002
 [20:44:55.7]   0xE3100020
 [20:44:55.7]   0x1A000001
 [20:44:55.7]   0xE3A04016
 [20:44:55.7]   0xEA000029
 [20:44:55.8]   0xE351000B
 [20:44:55.8]   0x0A000007
 [20:44:55.8]   0xE3510003
 [20:44:55.8]   0x0A000005
 [20:44:55.8]   0xE351000A
 [20:44:55.8]   0x0A000003
 [20:44:55.8]   0xE3510009
 [20:44:55.8]   0x0A000001
 [20:44:55.8]   0xE3510005
 [20:44:55.8]   0x1A00001C
 [20:44:55.8]   0xE1A00006
 [20:44:55.8]   0xEBFFE60C
 [20:44:55.9]   0xE59F10A0
 [20:44:55.9]   0xE1D110BE
 [20:44:55.9]   0xE1500001
 [20:44:55.9]   0x2A000016
 [20:44:55.9]   0xE5D21005
 [20:44:55.9]   0xE3510005
 [20:44:55.9]   0x1A000001
 [20:44:55.9]   0xE3A0400D
 [20:44:55.9]   0xEA000014
 [20:44:55.9]   0xE3550000
 [20:44:55.9]   0x1A000001
 [20:44:55.9]   0xE3510003
 [20:44:56.0]   0x1A000007
 [20:44:56.0]   0xE3550001
 [20:44:56.0]   0x1A000001
 [20:44:56.0]   0xE3510009
 [20:44:56.0]   0x1A000003
 [20:44:56.0]   0xE3550002
 [20:44:56.0]   0x1A000004
 [20:44:56.0]   0xE351000A
 [20:44:56.0]   0x0A000002
 [20:44:56.0]   0xE3A0000B
 [20:44:56.0]   0xE5C20005
 [20:44:56.0]   0xE5C30005
 [20:44:56.1]   0xE1A00006
 [20:44:56.1]   0xEBFFE5F7
 [20:44:56.1]   0xEA000002
 [20:44:56.1]   0xE3A04004
 [20:44:56.1]   0xEA000000
 [20:44:56.1]   0xE3A04004
 [20:44:56.1]   0xE3570000
 [20:44:56.1]   0x0A000001
 [20:44:56.1]   0xE3A00001
 [20:44:56.1]   0xFBFFCC58
 [20:44:56.1]   0xE320F000
 [20:44:56.1]   0xE320F000
 [20:44:56.2]   0xE1A00004
 [20:44:56.2]   0xEAFFFF93
 [20:44:56.2]   0x00002851
 [20:44:56.2]   0x00002859
 [20:44:56.2]   0x0000286A
 [20:44:56.2]   0x0000286F
 [20:44:56.2]   0x6000089C
 [20:44:56.2]  Register:
 [20:44:56.2]  r0:  0xE5920004  r1:  0x60013C20  r2:  0x602FF288
 [20:44:56.2]  r3:  0x00100000  r4:  0xE5920000  r5:  0x405C2184
 [20:44:56.2]  r6:  0x405C2184  r7:  0x405C2184  r8:  0x00000000
 [20:44:56.2]  r9:  0x00000195  r10:  0x60013C20  r11:  0x00000001
 [20:44:56.3]  r12:  0x00000000  r13:  0xFFFE2300  r14:  0x06052402
 [20:44:56.3]  r15:  0x405C218C
 [20:44:56.3]  SPSR: 0xA0000053  DFAR:  0x00000000  DFSR: 0x00000406
我怎样才能从中得到一些信息?或者我可以从寄存器中知道R0到R14之类的信息吗?这到底意味着什么?

首先,您可以看到(第一行)崩溃是由“数据中止”引起的。数据中止的可能原因有:

  • 线路故障
  • 翻译错误
  • 域故障
  • 权限错误
你可以在网上了解更多

之后,您将看到系统堆栈的内容(每行都是一个内存位置)

在底部,您可以找到每个寄存器的内容:

 [20:44:56.2]  Register:
 [20:44:56.2]  r0:  0xE5920004  r1:  0x60013C20  r2:  0x602FF288
 [20:44:56.2]  r3:  0x00100000  r4:  0xE5920000  r5:  0x405C2184
 [20:44:56.2]  r6:  0x405C2184  r7:  0x405C2184  r8:  0x00000000
 [20:44:56.2]  r9:  0x00000195  r10:  0x60013C20  r11:  0x00000001
 [20:44:56.3]  r12:  0x00000000  r13:  0xFFFE2300  r14:  0x06052402
 [20:44:56.3]  r15:  0x405C218C
请注意,这些值是十六进制的(因此每个值的开头都有0x)


您还可以使用GDB运行该程序,以在每条指令之后跟踪每个寄存器的内容

您正在使用什么(如果有的话)操作系统?你的编译器是什么?您可以调试(直接在主机设备上)或从远程开发主机进行调试吗?你绝对需要一个调试器;我们绝对需要了解您的编译器和目标OS/目标环境。IMHO…@paulsm4,我使用armcc编译器、threadx OS和T32进行调试R15是否意味着程序停止在那个位置,问题可能就在那个位置?我不能通过GDB运行这个程序,因为固件应该在目标系统上运行,并且由armccYes编译。R15是崩溃时的程序计数器。请记住,崩溃可能发生在这之前的几条指令,因为ARM使用管道,PC在执行之前指向几条指令。另外,请记住,这些可能是相对值,因为操作系统可能会在不同的内存位置加载程序。如何使用GDB运行它?我需要用gcc交叉编译我的目标固件吗?修改代码可能需要付出巨大的努力,还有其他建议吗?您可以尝试使用ARM模拟器运行它,并将GDB连接到它。