[笔记分享] [Exception] 用户空间异常之catch流程小结

本文详细介绍了Android系统中,当用户空间应用程序出现异常时,如何通过debuggerd守护进程进行捕获并打印日志的过程。通过分析debuggerd的工作流程,包括client端的异常信号处理和server端的ptrace跟踪,以及如何将异常信息保存到tombstone文件,以辅助开发者进行问题定位。
摘要由CSDN通过智能技术生成

平台: MSM8260
OS: Android 2.3.4

概述

一般的Linux中,当user space ap执行发生exception的时候,可能我们只能看到segment fault这样的错误,在pc上的话可以用gdb、backtrace来跟踪产生exception的地方, 但是如果在手机上的话就不好跟踪了,不过在android平台上,google提供了一个catch exception的守护进程,叫debuggerd。它能将user space发生的exception捕捉到然后通过logcat打印出来。

通过Log发现,它的call stack只有一些地址,而不是想kernel对应的function name.因此,得将这些offset转成function name才能是huma-readable嘛。

所以本文先分析debuggerd的catch原理,然后再讲述如何转换offset为function name。


原理

介绍

看下Debuggerd的大概执行流程如下:

这里写图片描述

不管它运用了什么工具或者功能,大概的流程是逃不掉的:
获取exception process pid -> 跟踪 -> 获取想要的info –> 保存到文件或者打印到shell中,下面分析code.

client

Android启动之后,在init.rc中,debuggerd会被作为一个service而启动。
看它main函数:

这里写图片描述

先建立一个作为logd的client,因为logd server需要从debuggerd service中获取信息,所以它被作为一个logd client存在了,这里我们可以不必理会。

然后将自己作为android:debuggerd的server,既然它作为server,肯定有client存在咯。以android:debuggerd为关键字搜索中…

有一个叫debugger.c@bionic\linker,看它做啥了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值