APP 的健壮运行离不开错误监控,而其中 native 库的 crash 最麻烦,这也是混合语言没有官方推荐单一语言开发简便的原因之一。 最近 Everkm Note 在集成测试阶段,就遇到 crash 问题,好在经过简单的代码排查,基本可以猜测到原因,问题发生在 rust + bind(libssh) 上面,费了点功夫就修复了(这里还是忍不住夸赞下 Rust 的优秀,什么空指针异常,线程安全,都能很好的规避)。但如果是在生产环境,那就需要许多额外工作才能定位,初步想到的有
- Crash 监控(含 native lib)上报
- 符号表管理
- 堆栈映射源码位置
- 模拟数据测试排查
此次未来得及深入,待日后继续深究。
Ref:
- ndk rust null pointer crash - Google 搜索
- Android NDK崩溃行定位_obtaining output fd from tombstoned, type: kdebugg-CSDN博客
- Android Native Crash问题排查思路-腾讯云开发者社区-腾讯云
- android ndk空指针导致CRASH的问题_android ndk构造空指针崩溃-CSDN博客
- Debugging a Rust Segfault with Sentry | Product Blog • Sentry
- Cannot get backtrace (stack trace) on Android devices; does this lib support android? · Issue #442 · rust-lang/backtrace-rs
- stdlib: Missing backtrace on panic when using
std::backtrace::Backtrace
vsbacktrace::Backtrace
on Android · Issue #121033 · rust-lang/rust - 记录一次 SEGV_MAPERR 问题的分析、解决过程 - 舞风雪的独立博客
- ndk-stack | Android NDK | Android Developers
- 缩减、混淆处理和优化应用 | Android Studio | Android Developers