You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SIGSEGV/SEGV_MAPERR崩溃前向Logcat输出日志及异常捕获方案问询

Native 非稳定SIGSEGV崩溃参数捕获方案

可以通过信号捕获+线程局部存储的轻量方案实现崩溃时刻的入参快照,不需要全量打印日志,性能损耗可忽略:

  • 提前注册SIGSEGV、SIGBUS、SIGABRT等常见native崩溃信号的自定义处理handler,注意注册逻辑要放在Google Breakpad初始化之前执行,避免Breakpad优先拦截信号导致自定义逻辑无法触发
  • 在目标高频调用方法的入口,将所有入参序列化后写入线程局部存储(TLS) 中预分配的固定大小缓冲区,仅保留当前线程最新一次的调用参数即可,不需要存储历史调用记录,内存开销极低,完全不会影响高频调用的性能
  • 崩溃信号触发后,在信号处理函数中直接从TLS中读出预存的最新入参,写入Breakpad的minidump自定义附加字段,或者预先开辟的独立日志文件中,和崩溃信息一起上报即可

信号处理函数内仅可使用异步信号安全的系统调用,不可调用malloc、标准IO这类非安全接口,入参存储的缓冲区必须提前预分配,只做内存拷贝操作即可

如果仍有性能顾虑,可以选择自适应采样方案:

  • 正常运行阶段仅采样1%的调用记录,当方法返回异常错误码、执行超时等异常特征时,自动将当前线程的采样率提升至100%,保留后续100~500次调用的全量参数,平衡性能开销和诊断成功率

拿到崩溃上报的信息后,可以配合minidump_stackwalk工具解析minidump的调用栈与崩溃地址,和你记录的入参做对应,即可快速定位是否是特殊入参导致的非法内存访问。

内容的提问来源于stack exchange,提问作者Motoko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:39:01