在进行Android NDK开发的时候, 因为代码编写导致崩溃的问题时有发生,但是问题在于,Native层的崩溃日志,如果只看LogCat输出的内容,我们会发现,根本无法进行分析和处理,因为日志内容中都是一大堆的内存地址信息。

原始错误日志:

2020-08-20 18:04:01.149 27129-27129/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***2020-08-20 18:04:01.150 27129-27129/? A/DEBUG: Build fingerprint: 'HONOR/LLD-AL00/HWLLD-H:9/HONORLLD-AL00/9.1.0.140C00:user/release-keys'2020-08-20 18:04:01.150 27129-27129/? A/DEBUG: Revision: '0'2020-08-20 18:04:01.150 27129-27129/? A/DEBUG: ABI: 'arm'2020-08-20 18:04:01.150 27129-27129/? A/DEBUG: Happend: 'Thu Aug 20 18:04:01 2020    '2020-08-20 18:04:01.151 27129-27129/? A/DEBUG: SYSVMTYPE: Art    APPVMTYPE: Art2020-08-20 18:04:01.151 27129-27129/? A/DEBUG: pid: 26194, tid: 27088, name: Thread-1682  >>> com.renhui.maomaomedia <<<2020-08-20 18:04:01.151 27129-27129/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x02020-08-20 18:04:01.151 27129-27129/? A/DEBUG: Cause: null pointer dereference2020-08-20 18:04:01.151 27129-27129/? A/DEBUG:     r0  c8da4000  r1  00000000  r2  eed3a564  r3  400000002020-08-20 18:04:01.151 27129-27129/? A/DEBUG:     r4  c58858f0  r5  c5885970  r6  c5885970  r7  c58859402020-08-20 18:04:01.151 27129-27129/? A/DEBUG:     r8  00006652  r9  000069cd  r10 c92a626d  r11 c8da40002020-08-20 18:04:01.151 27129-27129/? A/DEBUG:     ip  c954dfa8  sp  c58858f0  lr  c92a641b  pc  c92a62a42020-08-20 18:04:01.153 27129-27129/? A/DEBUG: backtrace:2020-08-20 18:04:01.153 27129-27129/? A/DEBUG:     #00 pc 000192a4  /data/app/com.renhui.maomaomedia-HZzt4BSwxxXs-qqIDrrlng==/lib/arm/libmedia-editor-lib.so (VideoHandler::decodeVideo()+28)2020-08-20 18:04:01.153 27129-27129/? A/DEBUG:     #01 pc 0001927b  /data/app/com.renhui.maomaomedia-HZzt4BSwxxXs-qqIDrrlng==/lib/arm/libmedia-editor-lib.so (decodeVideoT(void*)+14)2020-08-20 18:04:01.153 27129-27129/? A/DEBUG:     #02 pc 00065ac7  /system/lib/libc.so (__pthread_start(void*)+22)2020-08-20 18:04:01.153 27129-27129/? A/DEBUG:     #03 pc 0001e9ad  /system/lib/libc.so (__start_thread+32)

Native日志分析方式:

将LogCat输出的Native崩溃日志,拷贝到crash.log(注意:最好以星号这行开始),并复制到build目录下的cmake编译后的so文件目录下,需要注意的是编译目录armeabi要和crash.log对应,cmake\debug\obj\arm-XXX目录下要有so文件,这个是编译的时候生成的。

例如,我们运行的so文件是armeabi-v7a下的,那么拷贝到此下面,执行如下命令:

ndk-stack -sym C:\Users\maomao\Desktop\WukongMemo\MaoMaoMedia\player\build\intermediates\cmake\debug\obj\armeabi-v7a -dump crash.log

然后我们就能看到带文件名、函数名和行号的log日志了,进而我们就可以进一步排查和修复问题了。

C:\Users\maomao\Desktop\WukongMemo\MaoMaoMedia\player\build\intermediates\cmake\debug\obj>ndk-stack -sym C:\Users\maomao\Desktop\WukongMemo\MaoMaoMedia\player\build\intermediates\cmake\debug\obj\armeabi-v7a -dump crash.log********** Crash dump: **********Build fingerprint: 'HONOR/LLD-AL00/HWLLD-H:9/HONORLLD-AL00/9.1.0.140C00:user/release-keys'#00 0x000192a4 /data/app/com.renhui.maomaomedia-HZzt4BSwxxXs-qqIDrrlng==/lib/arm/libmedia-editor-lib.so (VideoHandler::decodeVideo()+28)                                                                                                         VideoHandler::decodeVideo()                                                                                                         C:\Users\maomao\Desktop\WukongMemo\MaoMaoMedia\player\.cxx\cmake\debug\armeabi-v7a\../../../../src/main/cpp/player\VideoHandler.cpp:59:27#01 0x0001927b /data/app/com.renhui.maomaomedia-HZzt4BSwxxXs-qqIDrrlng==/lib/arm/libmedia-editor-lib.so (decodeVideoT(void*)+14)                                                                                                         decodeVideoT(void*)                                                                                                         C:\Users\maomao\Desktop\WukongMemo\MaoMaoMedia\player\.cxx\cmake\debug\armeabi-v7a\../../../../src/main/cpp/player\VideoHandler.cpp:20:19#02 0x00065ac7 /system/lib/libc.so (__pthread_start(void*)+22)#03 0x0001e9ad /system/lib/libc.so (__start_thread+32)Crash dump is completed

 

更多相关文章

  1. [android]android自动化测试六之命令行编译APK
  2. Eclipse开发环境导入android sdk的sample中的源码
  3. 用ndk-build 编译C语言文件,生成可在android系统上运行的文件
  4. Android二维码开源项目zxing编译
  5. 深入浅出 - Android系统移植与平台开发(二) - 准备Android开发环境
  6. cocos2dx - android环境配置及编译
  7. Android(安卓)底层开发例子一
  8. ubuntu 下基于源码的android平台搭建与内核编译
  9. 在Android中使用logback-android日志框架配置 slf4j + logback

随机推荐

  1. android中如何执行java命令
  2. Android(安卓)Drawable Resources系列5:
  3. 1、Android(安卓)Studio的安装及环境配置
  4. 学习:Android框架
  5. 跟雷军一起干,小米 Android(安卓)开发工程
  6. Android实例剖析笔记(二)
  7. Android获取触摸手势实现左右滑动
  8. Android(安卓)音频数据流(2): 从 AudioTrac
  9. 史上最全的Android面试题集锦
  10. Android提示:使用或覆盖了已过时的 API