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
相关产品推荐
相关产品推荐

