如下错误信息:
<7>[ 824.840000] factory-test: unhandled page fault (7) at 0x20090200, code 0x817//此处表明是factory-test进程出错,空指针错误
<1>[ 824.840000] pgd = c3d48000
<4>[ 824.840000] T:803
<1>[ 824.840000] [20090200] *pgd=43e0e031, *pte=00000000T:802
<4>[ 824.850000] , *ppte=00000000T:820
<4>[ 824.850000]
<4>[ 824.850000]
<4>[ 824.850000] Pid: 1098, comm: factory-test
<4>[ 824.850000] CPU: 0 Not tainted (2.6.32.9-bcm5892 #6)
<4>[ 824.850000] T:804
<4>[ 824.850000] PC is at 0x400a4ee8
<4>[ 824.850000] LR is at 0x400a4ea4
<4>[ 824.850000] pc : [<400a4ee8>] lr : [<400a4ea4>] psr: 20000010
<4>[ 824.850000] sp : bea706a4 ip : 20080090 fp : 00000000//此信息及其重要,表明PC指针位置为0x400a4ee8,LR为0x400a4ea4,SP为bea706a4,此时可以大致定位错误点
<4>[ 824.850000] T:800
<4>[ 824.850000] r10: 00000008 r9 : 20000000 r8 : 00000012
<4>[ 824.850000] r7 : 20080000 r6 : 00000000 r5 : 00000009 r4 : 20090000
<4>[ 824.850000] r3 : 00000200 r2 : 00000000 r1 : 20090200 r0 : 00000001
<4>[ 824.850000] Flags: nzCv IRQs on FIQs on Mode USER_32 ISA ARM Segment user//表明错误出现在用户模式USER_32下,即为应用错误
<4>[ 824.850000] Control: 00c5387d Table: 43d48008 DAC: 00000015
<4>[ 824.850000] [<c0031fb4>] (show_regs+0x0/0x4c) from [<c0036380>] (__do_user_fault+0x5c/0xa4)
<4>[ 824.850000] r4:c3f6ec60
<4>[ 824.850000] [<c0036324>] (__do_user_fault+0x0/0xa4) from [<c00365f8>] (do_page_fault+0x1b4/0x1e4)
<4>[ 824.850000] r7:20090200 r6:c3d77ca0 r5:c3f6ec60 r4:00000002
<4>[ 824.850000] [<c0036444>] (do_page_fault+0x0/0x1e4) from [<c0030310>] (do_DataAbort+0x3c/0x9c)
<4>[ 824.850000] [<c00302d4>] (do_DataAbort+0x0/0x9c) from [<c0030f84>] (ret_from_exception+0x0/0x10)
<4>[ 824.850000] Exception stack(0xc2867fb0 to 0xc2867ff8)
<4>[ 824.850000] 7fa0: 00000001 20090200 00000000 00000200
<4>[ 824.850000] 7fc0: 20090000 00000009 00000000 20080000 00000012 20000000 00000008 00000000
<4>[ 824.850000] 7fe0: 20080090 bea706a4 400a4ea4 400a4ee8 20000010 ffffffff
<4>[ 824.850000] r8:00000012 r7:20080000 r6:00000000 r5:00000009 r4:ffffffff
根据上述错误信息分析,可以知道错误在用户模式下的factory-test进程中,且此时的PC指针位置为0x400a4ee8,LR为0x400a4ea4,SP为bea706a4,此时可以大致定位错误点;
方法:
使用ps查看factory-test进程对应的PID;1060
此时进入1060目录下:cd /proc/1060
Cat maps即可查看factory-test进程所引用的.so以及各个.so所在的内存地址范围,根据PC指针的地址查找此地址是落在哪个.so地址范围即可定位;