现状
发生native异常时,安卓系统会将native异常信息输出到logcat中,但是java层无法感知到native异常的发生,进而无法获取这些异常信息并上报到业务的异常监控系统。
业务部门可以快速实现java层的异常监控系统(java层全局异常捕获的实现很简单),又或者业务部门已经实现了java层的异常监控系统,但没有覆盖到native层的异常捕获。
安卓还可以接入Breakpad,其导出的minidump文件不仅体积小信息还全,但有两个问题:
1、和现状第1点的问题相同。
2、需要拉取minidump文件并经过比较繁琐的步骤才可以得出有用的信息:
启动时检测Breakpad是否有导出过minidump文件,有则说明发生过native异常。
到客户现场,或者远程拉取minidump文件。
编译出自己电脑的操作系统的minidump_stackwalk工具。
使用minidump_stackwalk工具翻译minidump文件内容,例如拿到崩溃时的程序计数器寄存器内的值(下文称为pc值)。
找到对应崩溃so库ABI的add2line工具,并根据上一步拿到的pc值定位出发生异常的代码行数。
整个步骤十分复杂和繁琐,且没有java层的crash线程栈信息,不利于java开发者快速定位调用native的代码。
设计意图
1、让java层有知悉native异常的通道:
java开发者可以在java代码中得到native异常的情况,进而对native异常做出反应,而不是再次启动后去检测Breakpad是否有导出过minidump文件。
2、增

最低0.47元/天 解锁文章
181

被折叠的 条评论
为什么被折叠?



