(转)查看栈信息中 .so文件里地址对应的方法名称
在Android开发中,涉及到JNI时,有时会报告非常底层栈信息,在栈信息中 仅仅给出了.so文件出错位置的地址,根本看不成问题所在,但是如果使用arm-eabi-addr2line 命令,就可以把地址信息转换成方法名称:
arm-eabi-addr2line 命令 在%ANDROID_SOURCE%\prebuilt\linux-x86\toolchain\arm-eabi-4.4.0\bin;
例如有如下的栈信息:
02-21 13:34:39.621 I/DEBUG ( 79): pid: 394, tid: 560 >>> android.process.media <<<
02-21 13:34:39.621 I/DEBUG ( 79): signal 11 (SIGSEGV), fault addr 4b98b000
02-21 13:34:39.621 I/DEBUG ( 79): r0 4b98a054 r1 00000000 r2 00000e94 r3 4b98b000
02-21 13:34:39.621 I/DEBUG ( 79): r4 00000000 r5 4b989f14 r6 9ea08104 r7 0029b0e5
02-21 13:34:39.621 I/DEBUG ( 79): r8 4b98a564 r9 43ddfc68 10 43ddfc50 fp 00290840
02-21 13:34:39.621 I/DEBUG ( 79): ip 9ea0816c sp 4b9898c8 lr 9ea05393 pc afd1cde6 cpsr 20000030
02-21 13:34:39.621 I/DEBUG ( 79): d0 0000004442880000 d1 3ff0000042880000
02-21 13:34:39.621 I/DEBUG ( 79): d2 bfd3441350baf6de d3 c1493000c1323800
02-21 13:34:39.621 I/DEBUG ( 79): d4 4900000040dcb000 d5 000000000006e580
02-21 13:34:39.621 I/DEBUG ( 79): d6 4515a00000000800 d7 40800000c48ee000
02-21 13:34:39.621 I/DEBUG ( 79): d8 0000000000000000 d9 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): d10 0000000000000000 d11 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): d12 0000000000000000 d13 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): d14 0000000000000000 d15 0000000000000000
02-21 13:34:39.621 I/DEBUG ( 79): scr 80000012
02-21 13:34:39.621 I/DEBUG ( 79):
02-21 13:34:39.661 I/DEBUG ( 79): #00 pc 0001cde6 /system/lib/libc.so
02-21 13:34:39.661 I/DEBUG ( 79): #01 pc 00005390 /system/lib/libdrm1.so
02-21 13:34:39.661 I/DEBUG ( 79): #02 pc 0000321c /system/lib/libdrm1.so
02-21 13:34:39.661 I/DEBUG ( 79):
02-21 13:34:39.661 I/DEBUG ( 79): code around pc:
02-21 13:34:39.661 I/DEBUG ( 79): afd1cdc4 429a3301 2000d1f4 46c0bd30 2a00b510
则执行以下命令:
arm-eabi-addr2line -f -e %ANDROID_SOURCE%/out/target/product/xxxxx/system/lib/libdrm1.so 00005390
返回结果就是该地址对应的方法名称。