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

Android平台Crashlytics在Release模式下生成误导性堆栈追踪

Android Crashlytics Release版本堆栈追踪位置错误问题

我的Android应用已完成Crashlytics配置,使用最新版SDK,编写了一段触发原生崩溃的测试代码来验证报告功能。Debug模式下执行崩溃测试时,收到的报告堆栈追踪清晰准确;但在Release构建版本中测试时,虽然能获取可读的堆栈追踪,却指向了代码中的错误位置——巧合的是,这些误导性追踪刚好指向实际崩溃方法紧邻的下一个方法,文件名和行号都能显示,但崩溃绝不可能发生在该位置。

原生代码通过常规CMakeLists.txt构建,从承载原生库的其他库模块加载。我已通过以下命令上传了Debug和Release符号:

./gradlew app-module:assemblerelease app-module:uploadCrashlyticsSymbolFilerelease
./gradlew app-module:assembledebug app-module:uploadCrashlyticsSymbolFiledebug

有没有人遇到过类似情况?仅在Release模式下出现这种可读但存在误导的追踪,原因可能是什么?


编辑补充:
我认为追踪位置错误并非由内联或循环展开导致,因为实际崩溃源与错误指向的位置逻辑简单且完全无关,且调用TestCrash的代码附近并未调用ShowMessage方法。相关代码如下:

void ScriptWrapper::TestCrash()
{
    MyObject* obj = nullptr;
    obj->GetID(); // 实际崩溃发生的位置
}

void ScriptWrapper::ShowMessage(std::string sMsg, const MESSAGE_TYPE type, const bool abort)
{
    std::stringstream ss;
    Logger::TYPE logType;
    switch (type)
    {
    case ERROR:
        ss << ("ERROR - ");
        logType = Logger::ERROR; // Release版本崩溃堆栈追踪指向的位置
        if (abort)
        {
            Abort();
        }
        break;
    case WARNING:
        ss << ("Warning - ");
        logType = Logger::WARNING;
        break;
    default:
        logType = Logger::INFO;
    };
    ss << sMsg;
    Log(ss.str(), logType);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 14:35:39