
Native程序通过link连接后,当发生Native Crash时,则kernel会发送相应的signal
,当进程捕获致命的signal
,通知debuggerd
调用ptrace
来获取有价值的信息(这是发生在crash前)。
- kernel 发送signal给target进程(包含native代码);
- target进程通过debuggerd_signal_handler,捕获signal;
- 建立于debuggerd进程的socket通道;
- 将action = DEBUGGER_ACTION_CRASH的消息发送给debuggerd服务端;
- 阻塞等待debuggerd服务端的回应数据。
- debuggerd作为守护进程,一直在等待socket client的连接,此时收到action = DEBUGGER_ACTION_CRASH的消息;
- 执行到handle_request时,通过fork创建子进程来执行各种dump相关操作;
- 新创建的进程,通过socket与system_server进程中的NativeCrashListener线程建立socket通道,并向其发送native crash信息;
- NativeCrashListener线程通过创建新的名为“NativeCrashReport”的子线程来执行AMS的handleApplicationCrashInner方法。
参考
debuggerd守护进程 - Gityuan博客 | 袁辉辉的技术博客
理解Native Crash处理流程 - Gityuan博客 | 袁辉辉的技术博客
理解 Android Native Crash 处理流程 - 掘金