C 如何生成应用程序的崩溃报告?
目前,我正在使用C 如何生成应用程序的崩溃报告?,c,arm,rtos,ds-5,C,Arm,Rtos,Ds 5,目前,我正在使用ARM DS-5 IDE为一个基于ARM的目标设备开发应用程序,并使用ARM编译器工具链RVCT3.1进行编译。 目标设备中使用的线程X RTOS 在目标设备中加载应用程序后,它会在一段时间后意外崩溃。所以我想知道它在哪里崩溃。我需要堆栈转储或跟踪它 在目标硬件上使用AT命令,我能够生成堆栈转储,如下所示 +XLOG: Exception Number: 1 Trap Class: 0xBBBB () System Stack: 0x00000022 0x50263
ARM DS-5 IDE
为一个基于ARM的目标设备开发应用程序,并使用ARM编译器工具链RVCT3.1
进行编译。
目标设备中使用的线程X RTOS
在目标设备中加载应用程序后,它会在一段时间后意外崩溃。所以我想知道它在哪里崩溃。我需要堆栈转储或跟踪它
在目标硬件上使用AT命令,我能够生成堆栈转储,如下所示
+XLOG: Exception Number: 1
Trap Class: 0xBBBB ()
System Stack:
0x00000022
0x502637BC
0x01000022
0x00016001
0xC9FFDF00
0x000022C1
0x50310CC0
0x000022C1
0x00000049
0x5025D740
0x00000002
0x00000000
0x680DCF6E
0x00FF22C0
0x49F70301
0x6A552FFB
0xB104FF3D
0xCA9895C1
0x46F4EBA7
0xAC73DDEA
Date: 2000:1:1
Time: 0:54:10
Register:
r0: 0x00000022 r1: 0x502637BC r2: 0x01000022
r3: 0x00016001 r4: 0xC9FFDF00 r5: 0x000022C1
r6: 0x50310CC0 r7: 0x000022C1 r8: 0x00000049
r9: 0x5025D740 r10: 0x00000002 r11: 0x00000000
r12: 0x680DCF6E r13: 0xFFFF3598 r14: 0x920C10C4
r15: 0x00FF22C0
SPSR: 0x80000073 DFAR: 0x00000000 DFSR: 0x00000000
+XLOG: Exception Number: 2
Trap Class: 0xAAAA ()
System Stack:
0x00000000
0x5029FC8D
0x502637C0
0x00000000
0xC6FFBF00
0x000022C1
0x50310CC0
0x000022C1
0x00000049
0x5025D740
0x00000002
0x00000000
0x5A067AAE
0x50210B2C
0x49F70301
0x6A552FFB
0xB104FF3D
0xCA9895C1
0x46F4EBA7
0xAC73DDEA
Date: 2000:1:1
Time: 1:33:6
Register:
r0: 0x00000000 r1: 0x5029FC8D r2: 0x502637C0
r3: 0x00000000 r4: 0xC6FFBF00 r5: 0x000022C1
r6: 0x50310CC0 r7: 0x000022C1 r8: 0x00000049
r9: 0x5025D740 r10: 0x00000002 r11: 0x00000000
r12: 0x5A067AAE r13: 0xFFFF3598 r14: 0x920C10C4
r15: 0x50210B2C
SPSR: 0x80000053 DFAR: 0xC6FFBF04 DFSR: 0x00000005
如何使用此转储调试问题?如何使用映射文件查找地址?您的目标硬件是否有MMU?你有像JTAG这样的硬件调试器接口吗?如果两者的答案都是“否”,那么您就有一个大问题。您可以轻松添加通过串行端口打印的调试输出,或者如果硬件具有专用调试端口或JTAG接口,则可以将调试器连接到该端口。因为实时操作系统的问题在于,它们通常在空间和功能有限的系统上运行,崩溃转储很大,生成速度可能较慢。如果您有两个调试打印输出,而您只得到第一个,那么您就知道崩溃发生在两个打印输出之间。然后从这里开始缩小范围,缩小两个打印输出之间的差距,直到一个函数调用为止,然后在函数内部继续缩小范围,直到找到有问题的行为止。在单个函数中,打印函数参数的值以及局部变量的值有助于查找超出范围的空指针或其他无效指针或数组索引。,^^^^^^基本上是一项艰巨的工作。重建、打印、记笔记、分析..protip-如果没有硬件调试器接口,尤其是tasker内核,不要使用嵌入式。这会让你发疯的。