NDK开发错误定位

作者: Android高级开发 | 来源:发表于2019-04-15 21:36 被阅读4次

    在NDK开发过程中,会经常遇到报错,但是这个不同于其他会把错误明显打印在日志上,这个只是把错误码会打印在日志,但如何定位错误出现在哪里呢,请让我慢慢道来!

    NDK错误定位流程

    第一种方法:

    • 打开cmd窗口

    • 切换到ndk工具arm-linux-androideabi-addr2line目录

        cd D:\android\android-ndk-r7b\toolchains\arm-linux-androideabi-4.4.3\prebuilt\windows\bin
      
        d:
      
    • 在Logcat把错误复制出来

        09-20 16:29:13.416: A/DEBUG(16497): Build fingerprint: 'OPPO/A57/A57:6.0.1/MMB29M/1499840266:user/release-keys'
        09-20 16:29:13.416: A/DEBUG(16497): Revision: '0'
        09-20 16:29:13.416: A/DEBUG(16497): ABI: 'arm'
        09-20 16:29:13.417: A/DEBUG(16497): pid: 18166, tid: 18191, name: .dnffmpegplayer  >>> com.dongnaoedu.dnffmpegplayer <<<
        09-20 16:29:13.417: A/DEBUG(16497): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x6c646ea1
        09-20 16:29:13.443: A/DEBUG(16497):     r0 dbc407f8  r1 eef3b9f0  r2 dbc408d4  r3 eef3b9f0
        09-20 16:29:13.444: A/DEBUG(16497):     r4 e5ebb800  r5 dbc40970  r6 6c646e61  r7 dbc407f8
        09-20 16:29:13.444: A/DEBUG(16497):     r8 dbc408d4  r9 eef3b9f0  sl dbb42000  fp f36411d5
        09-20 16:29:13.444: A/DEBUG(16497):     ip f3643eb8  sp dbc407d8  lr f3641295  pc dd9b37c4  cpsr 800f0010
        09-20 16:29:13.446: A/DEBUG(16497): backtrace:
        09-20 16:29:13.446: A/DEBUG(16497):     #00 pc 005af7c4  /data/app/com.dongnaoedu.dnffmpegplayer-2/lib/arm/libavcodec-56.so (avcodec_decode_video2+36)
        09-20 16:29:13.446: A/DEBUG(16497):     #01 pc **00002291**  /data/app/com.dongnaoedu.dnffmpegplayer-2/lib/arm/libmyffmpeg.so (init_avcodec_decode_video2
      
    • 找到错误码

      在上面复制出来的日志里找到错误码(00002291)

        09-20 16:29:13.446: A/DEBUG(16497):     #01 pc **00002291**  /data/app/com.dongnaoedu.dnffmpegplayer-2/lib/arm/libmyffmpeg.so 
      
      
    • 找到项目.so文件目录

        E:/workspace1.0/jni/dn_ffmpeg_player/obj/local/armeabi/libmyffmpeg.so
      
    • 在cmd窗口输入命令:

      arm-linux-androideabi-addr2line -e +.so文件目录 +错误码

        arm-linux-androideabi-addr2line -e E:/workspace1.0/jni/dn_ffmpeg_player/obj/local/armeabi/libmyffmpeg.so 00002291
      
    • 在cmd窗口可以定位到错误的行号

            E:\workspace1.0\jni\dn_ffmpeg_player/jni/dn_player.c:68
      
    • 回归代码找到错误并更改

      从上面可以得出现错误的行号 68,找到错误并更改

    第二种方法:

    • 打开cmd窗口

    • 切换到ndk工具android-ndk-r7b目录

        D:\android\android-ndk-r7b
      
    • 在Logcat把错误复制出来

        09-20 16:29:13.416: A/DEBUG(16497): Build fingerprint: 'OPPO/A57/A57:6.0.1/MMB29M/1499840266:user/release-keys'
        09-20 16:29:13.416: A/DEBUG(16497): Revision: '0'
        09-20 16:29:13.416: A/DEBUG(16497): ABI: 'arm'
        09-20 16:29:13.417: A/DEBUG(16497): pid: 18166, tid: 18191, name: .dnffmpegplayer  >>> com.dongnaoedu.dnffmpegplayer <<<
        09-20 16:29:13.417: A/DEBUG(16497): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x6c646ea1
        09-20 16:29:13.443: A/DEBUG(16497):     r0 dbc407f8  r1 eef3b9f0  r2 dbc408d4  r3 eef3b9f0
        09-20 16:29:13.444: A/DEBUG(16497):     r4 e5ebb800  r5 dbc40970  r6 6c646e61  r7 dbc407f8
        09-20 16:29:13.444: A/DEBUG(16497):     r8 dbc408d4  r9 eef3b9f0  sl dbb42000  fp f36411d5
        09-20 16:29:13.444: A/DEBUG(16497):     ip f3643eb8  sp dbc407d8  lr f3641295  pc dd9b37c4  cpsr 800f0010
        09-20 16:29:13.446: A/DEBUG(16497): backtrace:
        09-20 16:29:13.446: A/DEBUG(16497):     #00 pc 005af7c4  /data/app/com.dongnaoedu.dnffmpegplayer-2/lib/arm/libavcodec-56.so (avcodec_decode_video2+36)
        09-20 16:29:13.446: A/DEBUG(16497):     #01 pc **00002291**  /data/app/com.dongnaoedu.dnffmpegplayer-2/lib/arm/libmyffmpeg.so (init_avcodec_decode_video2
      
    • 找到错误码

      在上面复制出来的日志里找到错误码(00002291)

        09-20 16:29:13.446: A/DEBUG(16497):     #01 pc **00002291**  /data/app/com.dongnaoedu.dnffmpegplayer-2/lib/arm/libmyffmpeg.so 
      
      
    • 找到项目obj/local/armeabi文件目录

        E:/workspace1.0/jni/dn_ffmpeg_player/obj/local/armeabi
      
    • 在cmd窗口输入命令:

      arm-linux-androideabi-addr2line -e +.obj/local/armeabi文件目录+错误码

        adb logcat : ndk-stack -sym E:/workspace1.0/jni/dn_ffmpeg_player/obj/local/armeabi 00002291
      
    • 在cmd窗口可以定位到错误的行号

            E:\workspace1.0\jni\dn_ffmpeg_player/jni/dn_player.c:68
      
    • 回归代码找到错误并更改

      从上面可以得出现错误的行号 68,找到错误并更改

    • image
    image

    +qq群457848807:。获取以上高清技术思维图,以及相关技术的免费视频学习资料

    相关文章

      网友评论

        本文标题:NDK开发错误定位

        本文链接:https://www.haomeiwen.com/subject/pqfmwqtx.html