这周和同事一起解了个tombstone的bug, 记录下分析的过程,免得以后又忘记。。。

1>log的分析

pid: 122, tid: 14745, name: Binder_2  >>> /system/bin/mediaserver <<<

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000058

eax 00000000  ebx 41bbf784  ecx 00000000  edx 00000009

esi 450578f0  edi 40378054

xcs 00000073  xds 0000007b  xes 0000007b  xfs 00000000  xss 0000007b

eip 4088a5c2  ebp 45e15cb8  esp 45e15ca0  flags 00010297

backtrace:

#00  pc 000085c2  /system/lib/libcameraservice.so (android::CameraHardwareInterface::__set_buffer_count(preview_stream_ops*, int)+34)

#01  pc 0003b6fa  /system/lib/hw/camera.XXXX.so (android::PreviewThread::allocateGfxPreviewBuffers(int)+154)

#02  pc 0003ce83  /system/lib/hw/camera.XXXX.so (android::PreviewThread::threadLoop()+1203)

#03  pc 0001a2bc  /system/lib/libutils.so (android::Thread::_threadLoop(void*)+556)

#04  pc 0000dda8  /system/lib/libc.so (__thread_entry+248)

#05  pc 0001b031  /system/lib/libc.so

#06  pc 00001f2c  /system/lib/libc.so

从log可以看出, 进程遇到了一个空指针,出错地址为00000058.  一般产生tombstone的问题可能是访问已经被释放的数据,也可能是结构体中的某个函数指针为空。从CPU的寄存器可以看出通用寄存器的eax里的数据为0.

2>对发生问题的库文件进行反汇编,来找到出错的代码行。

00008b40 <_zn7android23camerahardwareinterface18__set_buffer_countep18preview_stream_opsi>:

8b40:       55                      push   %ebp

8b41:       89 e5                   mov    %esp,%ebp

8b43:       8d 64 24 e8             lea    -0x18(%esp),%esp

8b47:       8b 45 08                mov    0x8(%ebp),%eax

8b4a:       8b 55 0c                mov    0xc(%ebp),%edx

8b4d:       8b 40 2c                mov    0x2c(%eax),%eax

8b50:       8b 40 0c                mov    0xc(%eax),%eax

8b53:       89 54 24 08             mov    %edx,0x8(%esp)

8b57:       c7 44 24 04 04 00 00    movl   $0x4,0x4(%esp)

8b5e:       00

8b5f:       89 04 24                mov    %eax,(%esp)

8b62:       ff 50 58                call   *0x58(%eax)           <==出错的地方

8b65:       c9                      leave

8b66:       c3                      ret

8b67:       89 f6                   mov    %esi,%esi

8b69:       8d bc 27 00 00 00 00    lea    0x0(%edi,%eiz,1),%edi

在从汇编代码反推到对应的C/C++代码。

3> 找到出错的代码后,手动来设置相应的数据结构为空来验证能否产生相同的出错信息 4> 最后就是从tombstone的log文件去找线程间的同步问题。。。这里是最纠结的地方,得多看代码找可能的同步问题,然后加锁同步。。。

android tombstone发生过程,Android Tombstone解决步骤相关推荐

  1. android图片异步加载解决步骤

    Android – Asynchronous image loading in ListView Problem: How to load images in ListView asynchronou ...

  2. android tombstone发生过程,Android Tombstone 分析

    1.什么是tombstone 当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash 的时候,会保存一个 tom ...

  3. android tombstone发生过程,如何调试分析Android中发生的tombstone

    如何调试分析Android中发生的tombstone Android中较容易出现以下三类问题:Force close / ANR / Tombstone 前两者主要是查看当前的进程或者系统框架层的状态 ...

  4. 如何调试分析Android中发生的tombstone

    2019独角兽企业重金招聘Python工程师标准>>> 如何调试分析Android中发生的tombstone Android中较容易出现以下三类问题:Force close / AN ...

  5. android 9.0室内定位方案,Android GPS室内定位问题的解决方法(location为null)

    为什么室内没有location呢? 因为我们开发的时候几乎肯定都是在室内的,这个时候卫星你是搜索不到的,所以必然是定位不了的,所以系统如何将位置信息通知给你的程序.所以要从根本上解决这个问题,就要解决 ...

  6. 我的Android进阶之旅------gt;解决Jackson等第三方转换Json的开发包在开启混淆后转换的实体类数据都是null的bug...

    1.错误描述 今天测试人员提了一个bug,说使用我们的app出现了闪退的bug,后来通过debug断点调试,发现我们的app转换服务器发送过来的json数据后,都是为null.而之前已经提测快一个月的 ...

  7. com.android.phone已停止运行怎么解决方法,com.android.phone已停止运行怎么解决

    在安卓手机上,不少用户都会遇过com.android.phone已停止的弹窗,尤其经常刷机的最明显.导致的原因实在太多,有刷机步骤不对的,乱改系统文件的,这里小编综合网上的情况以及自身经历,给广大安卓 ...

  8. android splash白屏_解决Splash白屏黑屏问题

    当系统启动一个App时,zygote进程会首先创建一个新的进程去运行这个App,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,这极大地降低了用户体验,Android需要及时做出反馈 ...

  9. Android 接入穿山甲激励视频广告步骤与错误总结

    1.先去穿山甲官网,注册登录账号 2.侧边栏->广告变现->流量->应用->新建应用 3.侧边栏->广告变现->流量->代码位->新建代码位 4. 侧边 ...

最新文章

  1. 在android手机上运行PHP
  2. 如何使用C或C ++获取目录中的文件列表?
  3. 【嵌入式Linux】嵌入式项目实战之七步从零编写带GUI的应用之显示系统、输入系统、文字系统
  4. Mysql Sql语句令某字段值等于原值加上一个字符串
  5. Android——适配器其他组件(AutoCompleteTextView:自动完成文本编辑框;Spinner:下拉列表)...
  6. maple里面怎么搜索_教你用Maple全局优化工具寻找最值
  7. xshell 连接错误: Could not connect to '127.0.0.1' (port 22): Connection failed.
  8. 用Python画填色的中国分省地图(数据+源代码)
  9. MySQL分页查询效率
  10. 注意:QQ空间加密并不安全
  11. PHP interface 接口继承(一丶单接口继承)
  12. 2019年7月3号第九次练习(27移除元素)
  13. 图像滤镜艺术---水彩画滤镜
  14. 15.大数据---Mapreduce案例之---统计手机号耗费的总上行流量、下行流量、总流量
  15. 【文献数据速递】CEO绿色经历能否促进企业绿色创新
  16. 软件测试流程规范简介(不同公司流程规范不一样,仅供参考)
  17. Power supply 子系统之最简驱动实现
  18. MySQL中like查询是否会使用索引
  19. Unity中常用到的基础函数
  20. 将自己的网站上传至服务器并通过域名进行访问

热门文章

  1. oracle用EXPLAIN PLAN 分析SQL语句
  2. 爬虫(十二):scrapy中spiders的用法
  3. eclipse安装java web插件
  4. HTTPS 通俗简介
  5. 小试---EF5.0入门实例1
  6. Flash Builder 创建CSS
  7. Redis-主从复制
  8. How to use fb.data.query to get friends info?
  9. 是否会成为问题——Linq to Sql的执行可能无法复用查询计划
  10. mysql 帐号开启远程_两大步骤教您开启MySQL 数据库远程登陆帐号