“通常so库崩溃都是内存问题(野指针/空指针/访问越界...)”

1.backtrace信息as里面通常无法打印,需要 adb logcat > crash.log , 然后根据 crash.log 分析

I/DEBUG   ( 7520): backtrace:
I/DEBUG   ( 7520):     #00  pc 00022130  /system/lib/libc.so (__memcpy_base+104)
I/DEBUG   ( 7520):     #01  pc 000152a7  /data/app-lib/libtest-lib.so (testThread+582)
I/DEBUG   ( 7520):     #02  pc 0000d240  /system/lib/libc.so (__thread_entry+72)
I/DEBUG   ( 7520):     #03  pc 0000d3dc  /system/lib/libc.so (pthread_create+240)

2.回过头来想,看到“pc 00022130  /system/lib/libc.so (__memcpy_base+104)”的时候第一反应应该就是 memcpy 某个数据出错,地址为NULL 或者 长度越界

3.网上有很多利用 arm-linux-androideabi-addr2line 定位 so 库崩溃 函数行的资料,刚开始定位的时候是直接用最终release的so库作为基础,行数怎么都不出来。后面看到别人的路径试了才知道原来得用 一个类似中间件的so库才能定位到,我把这两个库理解固件里面为 elf 和 bin 的关系,在我的工程目录下面搜索出来可定位的库是在下面这个目录下

\build\intermediates\cmake\release\obj\armeabi-v7a\test.so

通过执行:arm-linux-androideabi-addr2line.exe -e 得到目标行

arm-linux-androideabi-addr2line.exe -e test.so 152a7 -f
testThread
\testlib\src\main\cpp/test-lib.cpp:850

NDK 下利用 arm-linux-androideabi-addr2line 定位 so 库问题点相关推荐

  1. linux+手机+gps,Linux环境下利用GPS+蓝牙实现移动定位

    搞了一个下午终于把这个弄清楚了:查了下网络资料基本也没什么相关的,这里就自己写个和大家分享下吧.虽然在XP系统下实现起 搞了一个下午终于把这个弄清楚了:查了下网络资料基本也没什么相关的,这里就自己写个 ...

  2. python多线程处理数据库_在flask框架下利用Python的threading或thread多线程库如何操作数据库?...

    萌新在写网站的发送邮件验证,为了防止用户滥发,所以加了权限.前端简单地disable按钮一刷新就没了,纯粹视觉提示作用,所以在后端models里为user加了一个resend_right,当为True ...

  3. 嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

    嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

  4. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  5. ARM Linux下UPnP使用

    ARM Linux下UPnP使用   一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术, ...

  6. linux编译freebsd,freebsd下作x86/arm linux的交叉编译器

    freebsd下作x86/arm linux的交叉编译器 2009-05-13 01:40:08来源:未知 阅读 () 以纯粹的源码编译交叉编译器,还是头一遭.以往都是利用目标主机上的头文件和库文件作 ...

  7. linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

    linux+Qt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html ...

  8. Linux下利用rsync实现多服务器文件同步

    Linux下利用rsync实现多服务器文件同步 目标:多服务器文件同步 环境:2台centos5.6 Web端:192.168.20.20 Backup端:192.168.20.21 需要备份目录为: ...

  9. linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改

    原文地址:http://www.cnblogs.com/firtree/p/4028354.html linux下利用openssl来实现证书的颁发(详细步骤) 1.首先需要安装openssl,一个开 ...

最新文章

  1. dbcontext mysql_.Net Core 2.0数据库第一种方法Mysql DB的Scaffold-DbContext
  2. SqlServer性能监控和优化总结
  3. boost::thread相关的测试程序
  4. HTML 链接 强制打开“另存为...”弹出式文本链接打开HTML
  5. Android查看真机布局,android-外部存储
  6. 设置部分文件不适用ARC机制
  7. asp.net定时自动执行控制台程序
  8. Pycharm设置一种好看的皮肤/主题
  9. 机器学习,深度学习的资料和工具库大全
  10. WPS实现公式居中同时编号对齐
  11. java 栈队列区别是什么意思_Java实现数据结构栈stack和队列Queue是什么?
  12. QT: 基于QT和嵌入式的视频监控系统
  13. npm ERR code EEXIST 报错 解决方案
  14. java计算里程_通过角速度计算里程(对于两轮机器人)?
  15. 杰理之静电测试等级【篇】
  16. 文献翻译神器---助你轻松阅读理解英文文献论文
  17. RT-Thread GD32F4xx RTC设备驱动
  18. 刚上线的阿里达摩院官网,从前端角度看圈点之处
  19. 每日站立会议怎么开?
  20. JUnit 5用户指南目录

热门文章

  1. 特斯拉被曝储存大量未加密个人数据,你的隐私正在“裸奔”!
  2. @程序员,你真的会用 Unix 命令?
  3. 程序员遇到什么样的工作状态应该果断跳槽走人?
  4. 未来的 AI 芯片将提升百倍性能!
  5. 辽工大计算机网络实验报告,辽工大计算机硬件实验报告.doc
  6. java检测textarea换行_Textarea和Java 换行符
  7. 基于python的证件照_用20行python代码给证件照换底色
  8. 3d max用不同目标做关键帧_3D动画制作流程大解析
  9. 2008年卫星地图_黄河入海口1984年-2016年,34年卫星地图变化
  10. SQL 取空格右边的字符_从零学会SQL,第2关