在项目开发中可能会经常出现jni层面的崩溃,像空指针,野指针,越界等崩溃,下面就是我项目中的一次崩溃日志:
08-09 17:19:57.351 31571 31571 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
08-09 17:19:57.352 31571 31571 F DEBUG : Build fingerprint: 'HUAWEI/ALP-AL00/HWALP:9/HUAWEIALP-AL00/187C00R1:user/release-keys'
08-09 17:19:57.352 31571 31571 F DEBUG : Revision: '0'
08-09 17:19:57.352 31571 31571 F DEBUG : ABI: 'arm'
08-09 17:19:57.352 31571 31571 F DEBUG : pid: 29139, tid: 31244, name: CameraThread >>> com.dmwa.cloudmeeting <<<
08-09 17:19:57.352 31571 31571 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
08-09 17:19:57.352 31571 31571 F DEBUG : Cause: null pointer dereference
08-09 17:19:57.352 31571 31571 F DEBUG : r0 00000000 r1 ef822fe8 r2 0000ffff r3 ae123200
08-09 17:19:57.352 31571 31571 F DEBUG : r4 ae123200 r5 b8c7d800 r6 b8c7d820 r7 00000004
08-09 17:19:57.352 31571 31571 F DEBUG : r8 b9ff8f20 r9 00000000 r10 b8c7d9cc r11 ba7f9858
08-09 17:19:57.352 31571 31571 F DEBUG : ip ef655fe4 sp ba7f9698 lr ef654d83 pc bd767c34
08-09 17:19:57.356 31571 31571 F DEBUG :
08-09 17:19:57.356 31571 31571 F DEBUG : backtrace:
08-09 17:19:57.356 31571 31571 F DEBUG : #00 pc 00011c34 /data/app/com.dmwa.cloudmeeting-xaxV7s1HU-LrkCCLJvsiWg==/lib/arm/libusb100.so
08-09 17:19:57.356 31571 31571 F DEBUG : #01 pc 0000d200 /data/app/com.dmwa.cloudmeeting-xaxV7s1HU-LrkCCLJvsiWg==/lib/arm/libusb100.so
08-09 17:19:57.356 31571 31571 F DEBUG : #02 pc 0000cb60 /data/app/com.dmwa.cloudmeeting-xaxV7s1HU-LrkCCLJvsiWg==/lib/arm/libusb100.so (libusb_handle_events_timeout_completed+968)
08-09 17:19:57.356 31571 31571 F DEBUG : #03 pc 0000d3cc /data/app/com.dmwa.cloudmeeting-xaxV7s1HU-LrkCCLJvsiWg==/lib/arm/libusb100.so (libusb_handle_events+52)
08-09 17:19:57.356 31571 31571 F DEBUG : #04 pc 00012ce4 /data/app/com.dmwa.cloudmeeting-xaxV7s1HU-LrkCCLJvsiWg==/lib/arm/libuvc.so (_uvc_handle_events+136)
08-09 17:19:57.356 31571 31571 F DEBUG : #05 pc 00065413 /system/lib/libc.so (__pthread_start(void*)+22)
1. 首先进入ndk安装目录下的toolchains\arm-linux-androideabi-4.9\prebuilt\windows-x86_64\bin目录
2. 在该目录下启动cmd,输入命令如下:
addr2line -C -f -e D:\zhancaihai\workspace\Moverio_EPSON_BT_35E\tmwa_android\Tmwa_FastMeetingCloud\libuvccamera0\src\main\obj\local\armeabi-v7a\libusb100.so 0000cb60 > zch.txt (注,前面一个是so的绝对全路径,后面zch.txt是输出的内容,这个so文件是android工程obj目录里面的,而不是libs里面的,obj目录是带有debug信息的库文件,libs的库文件是没有debug信息的,addr2line无法读取源代码信息),即可输出对应错误的行号。
注意:可能需要做一些配置,不然可能会输出??:?,所以需要在在Android.mk 文件中增加如下两个参数:-Wl,-Map=test.map -g ,即增加gcc警告和调试标志,此外在jni/目录下增加Application.mk 文件(若没有Application.mk时),修改为debug 模式,进行调试 即设置APP_OPTIM := debug
或者连上设备直接执行 adb shell logcat|ndk-stack -sym $PROJECT_PATH/obj/local/armeabi