Segment default debug 方法-重要
(1)現象: [6c6f6f70] *pgd=00000000
Pid: 2838, comm: WebViewCoreThre CPU: 0 Tainted: P (3.0.13 #1) PC is at 0x9f5c4302 LR is at 0x9f5c42f3 pc : [<9f5c4302>] lr : [<9f5c42f3>] psr: 00000030 sp : 49682518 ip : 00000000 fp : 9f6626c3 r10: 012e87b8 r9 : 00000000 r8 : 00000001 r7 : 014e5ca8 r6 : 00000000 r5 : 9f6b03d4 r4 : 01657e08 r3 : 0000011a r2 : 00000116 r1 : 015f9010 r0 : 6c6f6f70 Flags: nzcv IRQs on FIQs on Mode USER_32 ISA Thumb Segment user Control: 10c53c7d Table: 0dba404a DAC: 00000015
(2)dump 出 maps 資訊,找出PC指標對應的segment。 #cat /proc/2869/maps (2869 為browser 的程序pid) ............................................... ............................................... 9f500000-9f6a4000 r-xp 00000000 00:12 666 /system/lib/libchromium_net.so ............................................... ................................................
(3)算出出錯的偏移量: 0x9f5c4302-9f500000 =0xc4302
(4)用addr2line工具查了一把,定位code的位置
又因為*pgd=00000000,所以懷疑第一個引數是NULL,所以是否要在這裡加上NULL的判斷呢,因為skyworth有對browser有客製化, 對browser退出時的一些場景不再做save了。
QA: (1)segment default各個名稱含義 (2)addr2line 引數的含義 (3)用那個addr2line 工具