利用ndk工具下的objdump定位jni层的崩溃问题

在项目开发中可能会经常出现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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值