## Java崩溃监测
~~~
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
~~~
## Native崩溃监测
![](https://img.kancloud.cn/3c/39/3c392a611a8a1048fb833f31d0506e9f_558x246.png)
google的breakpad太大,有合规和性能和扩展问题,bugly也是,另外通过runtime process的execute打印logcat,启动新进程进行处理,进程也不稳定,因此实现高效轻量级的框架,基于信号处理函数和dump子线程:
![](https://img.kancloud.cn/03/e8/03e81dedaf1bd810a9993900abf90e85_640x226.png)
![](https://img.kancloud.cn/03/e8/03e81dedaf1bd810a9993900abf90e85_640x226.png)
主要思想都是捕捉cpu的异常中断,处理linux的sigaction信号量,主要都是通过设置回调:
①设置sigaction的信号处理函数sigaction\_handler
②启动dump子线程,等待被唤起
③触发异常,信号处理函数sigaction\_handler触发的时候,利用libunwind去解堆栈并且缓存起来到stack上下文
④通过互斥量的Lock和Unlock,唤起dump子线程,去dump堆栈到str,并且反调java堆栈补充信息,回调给java注册的监听,上层去打log、发后台日志、写文件等
概括:信号处理函数,注册信号量、libunwind解堆栈;子线程,dump merge 回调;
与其他方案的对比优化是,发现预加载的子线程,能够比直接回调和子进程回调,更好地回调到java层,很稳定;另外,这里还涉及了溢出栈开辟空间/互斥量保证线程安全/存量处理函数的恢复等考虑点
# 参考资料
[Android 平台 Native 代码的崩溃捕获机制及实现](https://mp.weixin.qq.com/s/g-WzYF3wWAljok1XjPoo7w)
- Android
- 四大组件
- Activity
- Fragment
- Service
- 序列化
- Handler
- Hander介绍
- MessageQueue详细
- 启动流程
- 系统启动流程
- 应用启动流程
- Activity启动流程
- View
- view绘制
- view事件传递
- choreographer
- LayoutInflater
- UI渲染概念
- Binder
- Binder原理
- Binder最大数据
- Binder小结
- Android组件
- ListView原理
- RecyclerView原理
- SharePreferences
- AsyncTask
- Sqlite
- SQLCipher加密
- 迁移与修复
- Sqlite内核
- Sqlite优化v2
- sqlite索引
- sqlite之wal
- sqlite之锁机制
- 网络
- 基础
- TCP
- HTTP
- HTTP1.1
- HTTP2.0
- HTTPS
- HTTP3.0
- HTTP进化图
- HTTP小结
- 实践
- 网络优化
- Json
- ProtoBuffer
- 断点续传
- 性能
- 卡顿
- 卡顿监控
- ANR
- ANR监控
- 内存
- 内存问题与优化
- 图片内存优化
- 线下内存监控
- 线上内存监控
- 启动优化
- 死锁监控
- 崩溃监控
- 包体积优化
- UI渲染优化
- UI常规优化
- I/O监控
- 电量监控
- 第三方框架
- 网络框架
- Volley
- Okhttp
- 网络框架n问
- OkHttp原理N问
- 设计模式
- EventBus
- Rxjava
- 图片
- ImageWoker
- Gilde的优化
- APT
- 依赖注入
- APT
- ARouter
- ButterKnife
- MMKV
- Jetpack
- 协程
- MVI
- Startup
- DataBinder
- 黑科技
- hook
- 运行期Java-hook技术
- 编译期hook
- ASM
- Transform增量编译
- 运行期Native-hook技术
- 热修复
- 插件化
- AAB
- Shadow
- 虚拟机
- 其他
- UI自动化
- JavaParser
- Android Line
- 编译
- 疑难杂症
- Android11滑动异常
- 方案
- 工业化
- 模块化
- 隐私合规
- 动态化
- 项目管理
- 业务启动优化
- 业务架构设计
- 性能优化case
- 性能优化-排查思路
- 性能优化-现有方案
- 登录
- 搜索
- C++
- NDK入门
- 跨平台
- H5
- Flutter
- Flutter 性能优化
- 数据跨平台