如何使用ndk中addr2line工具查询so库中错误信息行数。
jni现在在android项目中已经非常常见了,但是错误信息并不想android那样友好。
常见的c错误如下:

2020-03-12 12:13:49.055 10000-10372/com.tianchen.cloud_disk A/libc: Fatal signal 11 (SIGSEGV), code 1, fault addr 0x454d414b in tid 10372 (Thread-284)2020-03-12 12:13:49.130 10373-10373/? A/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***2020-03-12 12:13:49.131 10373-10373/? A/DEBUG: Build fingerprint: 'Android/rk3399_roc_pc/rk3399_roc_pc:7.1.2/NHG47K/lzf10261000:userdebug/test-keys'2020-03-12 12:13:49.131 10373-10373/? A/DEBUG: Revision: '0'2020-03-12 12:13:49.131 10373-10373/? A/DEBUG: ABI: 'arm'2020-03-12 12:13:49.131 10373-10373/? A/DEBUG: pid: 10000, tid: 10372, name: Thread-284  >>> com.tianchen.cloud_disk <<<2020-03-12 12:13:49.131 10373-10373/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x454d414b2020-03-12 12:13:49.131 10373-10373/? A/DEBUG:     r0 c911f878  r1 00000000  r2 1fb5602b  r3 c8ffafac2020-03-12 12:13:49.131 10373-10373/? A/DEBUG:     r4 454d414b  r5 df3a1c00  r6 c911f878  r7 0000001d2020-03-12 12:13:49.131 10373-10373/? A/DEBUG:     r8 df3d1100  r9 2815ed9d  sl caa41ee4  fp c5ab46542020-03-12 12:13:49.131 10373-10373/? A/DEBUG:     ip 05600000  sp c5ab4638  lr c8ffad60  pc c8ffad58  cpsr 200100102020-03-12 12:13:49.132 10373-10373/? A/DEBUG: backtrace:2020-03-12 12:13:49.132 10373-10373/? A/DEBUG:     #00 pc 000a6d58  /data/app/com.tianchen.cloud_disk-2/lib/arm/libicbp.so2020-03-12 12:13:49.133 10373-10373/? A/DEBUG:     #01 pc 0003ed70  /data/app/com.tianchen.cloud_disk-2/lib/arm/libicbp.so

backtrace中包含了出错的库,那么具体函数就要用到addr2line。
工具具体位置:ndk路径下 \toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin
使用如下:
在有问题的so目录下新建bat文件:

@echo offrem current directionset cur_dir=%cd% rem addr2line tool pathset add2line_path=D:\android-ndk-r13b\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin\aarch64-linux-android-addr2line.exe rem debug fileset /p debug_file=请输入当前目录下debug文件名: rem debug_file_pathset debug_file_path=%cur_dir%\%debug_file% rem debug addressset /p debug_addr=请输入异常时PC寄存器值: echo ----------------------- addr2line ------------------------echo debug文件路径: %debug_file_path%  PC=%debug_addr% if exist %debug_file_path% (%add2line_path% -e %debug_file_path% -f %debug_addr% ) else (echo debug file is no exist. ) echo ---------------------------------------------------------pause

然后设置自己的addr2line工具就行了,然后运行。
第一输入so名称。
第二数据pc后面地址信息。
效果如下:

更多相关文章

  1. android sqlite java.lang.IllegalArgumentException: contains
  2. 手把手--Android(安卓)Studio V3.5.2开发环境搭建及HelloWorld工
  3. android工程字符串多语言翻译遗漏查找工具
  4. Android之adt 23找不到NDK路径设置解决方案
  5. Android——使用 Broastcast 实现进程间通讯
  6. android "Only the original thread that created a view hierar
  7. Android(安卓)SDK下载和更新失败的解决方法!!!
  8. Android快速开发工具集合——YUtils
  9. Android:Native C源码(NDK)如何使用sqlite3进行编程?

随机推荐

  1. 安卓相对布局
  2. android 4.4 下载文件
  3. EditText的一些使用注意点
  4. Android 的一些比较好的开源代码项目
  5. android中选中,获得焦点的,点击区别
  6. Android(安卓)和风天气SDK获取天气
  7. 2010.10.28———Android 02
  8. 【Android】FadingEdge
  9. 解读Android(安卓)3.2的新特性
  10. AndroidManifest.xml中一些权限配置