--------------------------------------------------------------------------------------
---------beginning of /dev/log/main
D/dalvikvm( 997): GC_FOR_MALLOC freed 14318 objects / 713376 bytes in 44ms
I/DEBUG ( 781): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 781): Build fingerprint: 'generic/generic_mt5396/mt5396/mt5396:2.2/MASTER/eng.mtk71133.20120116.143429:eng/test-keys'
I/DEBUG ( 781): pid: 1629, tid: 1638 >>> ./test_segment_fault<<< #这里表示出错的进程的名字
I/DEBUG ( 781): signal 11 (SIGSEGV), fault addr00000000 #sig 11就是segment fault的错误
I/DEBUG ( 781): r0 00000000 r1 00000000 r2 00000000 r300000000
I/DEBUG ( 781): r4 800020e8 r5 00000000 r6 00000000 r700000078
I/DEBUG ( 781): r8 00100000 r9 0000879d 10 10000000 fp00000000
I/DEBUG ( 781): ip afd44728 sp 100ffe40 lr 800012b3 pc80000a5a cpsr 20000030
I/DEBUG ( 781): d0 00000000bd6bc8e3 d1 0000000000000000
I/DEBUG ( 781): d2 0000000000000000 d3 0000000000000000
I/DEBUG ( 781): d4 0000000000000000 d5 0000000000000000
I/DEBUG ( 781): d6 0000000000000000 d7 c18af96700000000
I/DEBUG ( 781): d8 0000000000000000 d9 0000000000000000
I/DEBUG ( 781): d10 0000000000000000 d11 0000000000000000
I/DEBUG ( 781): d12 0000000000000000 d13 0000000000000000
I/DEBUG ( 781): d14 0000000000000000 d15 0000000000000000
I/DEBUG ( 781): scr 00000000
I/DEBUG ( 781):
I/DEBUG ( 781): #00 pc 00000a5a /system/lib/libdummy_mayer.so #00 指示的地址访问出错的调用地方,并且出错的文件也给了出来:libdummy_mayer.so
I/DEBUG ( 781): #01 pc 000012ae /system/lib/libdummy_mayer.so
I/DEBUG ( 781): #02 pc 00008918 /mnt/usbdisk/test_segment_fault
I/DEBUG ( 781): #03 pc 000111d4 /system/lib/libc.so
I/DEBUG ( 781): #04 pc 00010cc4 /system/lib/libc.so
I/DEBUG ( 781):
I/DEBUG ( 781): code around pc:
I/DEBUG ( 781): 80000a38 681a9b01 429a9b01 2300bf14 46182301
I/DEBUG ( 781): 80000a48 4770b002 f04fb082 93010300 f04f9b01
I/DEBUG ( 781): 80000a58 701a0200 4770b002 b088b510 bf004c54
I/DEBUG ( 781): 80000a68 441ca300 f04f9003 93070300 0300f04f
I/DEBUG ( 781): 80000a78 f04f9306 93050300 2b009b03 4b4dd11c
I/DEBUG ( 781):
I/DEBUG ( 781): code around lr:
I/DEBUG ( 781): 80001290 f9d8f000 44234bac 2b03681b 9b03dc07
I/DEBUG ( 781): 800012a0 2b04681b 9b04d003 2b55781b f7ffd101
I/DEBUG ( 781): 800012b0 9b10fbcd 4ba09300 f10358e3 4ba800a8
I/DEBUG ( 781): 800012c0 46194423 44234b9e f44f461a f7ff73e9
I/DEBUG ( 781): 800012d0 9b10eaac f04fe12b 930c0300 f1039b0d
I/DEBUG ( 781):
I/DEBUG ( 781): stack:
I/DEBUG ( 781): 100ffe00 10000000
I/DEBUG ( 781): 100ffe04 afd0bacd /system/lib/libc.so
I/DEBUG ( 781): 100ffe08 10000000
I/DEBUG ( 781): 100ffe0c afd10944 /system/lib/libc.so
I/DEBUG ( 781): 100ffe10 000013e8
I/DEBUG ( 781): 100ffe14 0000d924 [heap]
I/DEBUG ( 781): 100ffe18 0000d928 [heap]
I/DEBUG ( 781): 100ffe1c 800020e8 /system/lib/libdummy_mayer.so
I/DEBUG ( 781): 100ffe20 00000000
I/DEBUG ( 781): 100ffe24 00000000
。。。。。。。。后面的不再列举出来了
--------------------------------------------------------------------------------------
前提:能得到以上信息,需要是debug版本的android哦
分析:
由以上信息我们可以知道具体出错的位置:#00 pc 00000a5a /system/lib/libdummy_mayer.so
根据以上信息找到对应出错的代码的地方(以下操作环境位于rd编译环境中,非board中):
A:首先需要到编译该debug版本的地方,进入android froyo目录: cdvm_linux/android/froyo-2.2
B:找到nonstripped的libdummy_mayer.so文件,find./ -name libdummy_mayer.so,一般都位于out/target/product/mt5396/symbols/的子目录
这里是out/target/product/mt5396/symbols/system/lib/libdummy_mayer.so
C:使用addr2line找到对应的代码:
./prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-addr2line-f -e out/target/product/mt5396/symbols/system/lib/libdummy_mayer.so 00000a5a
其输出类似如下:
dummy_function #这里显示的出错的地方所在的函数名,即死在哪个函数里面的
.../froyo-2.2/external/test_segment_fault/libdummys/ipc_msgq.c:103 #这里显示的是具体出错的地方,哪个文件多少行