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

为何Firebase无法显示完整的C++堆栈跟踪?

解决Firebase仅显示一级C++崩溃调用栈的问题
  • 确认符号文件匹配且完整
    上传的libGame.so符号文件必须和崩溃版本的二进制文件完全对应,不能混用其他版本的符号。可通过Firebase控制台「Crashlytics > 符号」页面,检查该版本的符号状态是否为「已处理」。另外,上传时要确保使用编译时带-g参数生成的完整调试符号,不能用经过strip处理的精简版本。

  • 检查C++编译与栈回溯配置
    编译libGame.so时必须添加以下编译选项,确保生成可解析的栈帧数据:

    -funwind-tables -fexceptions -g
    

    如果使用CMake,在CMakeLists.txt中添加:

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -funwind-tables -fexceptions -g")
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -funwind-tables -g")
    

    同时确保初始化Firebase Crashlytics C++ SDK时,未禁用栈跟踪收集功能。

  • 排查混淆与编译优化的影响
    若开启了ProGuard/R8混淆,需在规则中保留Crashlytics相关类及原生符号:

    -keep class com.google.firebase.crashlytics.ndk.** { *; }
    -keepattributes SourceFile,LineNumberTable
    

    避免使用-O3这类过度激进的编译优化,这类优化可能移除栈帧信息导致回溯不完整,Release版本可改用-O2并保留栈相关参数。

  • 检查控制台显示设置
    在Firebase崩溃报告详情页,点击「展开全部」按钮确认是否有隐藏的栈帧,同时切换到「原生栈」标签,确保查看的是C++层的完整调用栈而非Java层栈信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:00:01