【问题标题】:Firebase Crashlytic does not show stack strace with LLD linker Android AppFirebase Crashlytics 不显示带有 LLD 链接器 Android 应用程序的堆栈跟踪
【发布时间】:2020-07-03 17:53:19
【问题描述】:

我的项目是一个带有原生 C++ 代码和 Java 的简单 Android 游戏,它使用 cmake 编译 C/C++ 代码。
我将我的本机符号上传到 Firebase Crashlytic(Fabric 之前),以便在它们发生时捕捉我的崩溃。
我按照指令 here 设置 crashlytics。

我发现了一个具体问题:如果我对 C/C++ 代码使用 lld 链接器,Crashlytic 不会显示我的应用程序的任何堆栈跟踪。

这是我设置为使用 LLD 的配置
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=lld")

build.gradle中配置

    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.2'
        classpath 'io.fabric.tools:gradle:1.31.2'
        classpath 'com.google.gms:google-services:4.3.3'
    }

我使用crashlyticUploadSymbolsDebug 上传符号

日志上传很安静。

2020-03-23 15:02:03.664 [DEBUG] (Execution worker for ':') com.crashlytics  - Crashlytics attempting to upload cSYM files.
2020-03-23 15:02:03.669 [DEBUG] (Execution worker for ':') com.crashlytics  - POST file: C:\Users\nhut_\.crashlytics\com.crashlytics.tools\app-f5c61bd8c0ab9f7beacd8e312f884ac1970c43e5\debug\csyms\Breakout-aarch64-2cbd7a2add29f8fbff897f89c43ea0d93088c11f.cSYM.gz to URL: https://cm.crashlytics.com/api/v3/platforms/android/code_mappings
2020-03-23 15:02:03.983 [DEBUG] (Execution worker for ':') com.crashlytics  - POST response: [reqId=c8949d54f956c305a08f1744dabdd9b226b494443224707e] 202
2020-03-23 15:02:03.984 [DEBUG] (Execution worker for ':') com.crashlytics  - POST file: C:\Users\nhut_\.crashlytics\com.crashlytics.tools\app-f5c61bd8c0ab9f7beacd8e312f884ac1970c43e5\debug\csyms\Breakout-aarch64-b0e07c6b9715755bb3b1d881aefe1777a7dcca11.cSYM.gz to URL: https://cm.crashlytics.com/api/v3/platforms/android/code_mappings
2020-03-23 15:02:04.235 [DEBUG] (Execution worker for ':') com.crashlytics  - POST response: [reqId=65ed22d3d2111a7dadc5b61109f7d7664dcd86ba58579c9f] 202
2020-03-23 15:02:04.236 [DEBUG] (Execution worker for ':') com.crashlytics  - cSYM file(s) uploaded.

你知道如何解决这个问题吗?

我的操作系统是Windows 10 1909 64bit, Android Studio 3.5.1, android-ndk-r21

测试的设备是 Pixel 3。

感谢您抽出宝贵时间阅读并感谢您的建议。
我发现类似的问题是here,但直到现在都没有答案

【问题讨论】:

    标签: android firebase google-fabric crashlytics-android


    【解决方案1】:

    我们遇到了类似的问题,Crahalytics 中没有符号。

    • NDK 版本:21.0.6113669。
    • Crashalytics Gradle 插件:2.3.0

    链接器:

    1. LLD - 无符号
    2. 带有链接器标志的 LLD:-Wl,--no-rosegment Dan Albert 在此错误报告中建议:https://github.com/android/ndk/issues/1196 - 无符号
    3. 默认链接器 - 无符号。

    我们正在努力,欢迎提出任何建议。

    【讨论】:

    • 您好@Max Raskin,您是使用 Cmake 还是第三方工具链在您的项目中编译 C/C++ 部分?我的项目可以使用 Cmake。
    • @seal2002 我正在使用捆绑的 CMake 3.10.x
    • 你使用 Android App Bundle 吗?你在什么设备上测试?架构和固件?
    • 更新:运行 llvm-strip 工具的 stripDebugDebugSymbols 任务弄乱了我们已经剥离的 .so,它改变了其中的一些位,因此使其 sha1 与未剥离的 so 文件的 sha1 不兼容。
    • Update2: packagingOptions { doNotStrip "*/arm64-v8a/libMyLibrary.so" } 解决了我们的问题
    【解决方案2】:

    我们仍在使用 r20 NDK,并且使用它和 -fuse-ld=lld 存在原生 Crashlytics 问题,因此我们停止使用它,现在一切正常(原生堆栈跟踪已在 Firebase 控制台中正确解析)

    【讨论】:

    • 感谢您的回答。我已经用gold linkerdefault linker 进行了测试,一切都很好。由于某些原因,我想使用lld linker,因为它为公司项目优化了一些东西(链接时间从 10 分钟减少到 2 分钟等等)。所以我想知道 Fabric 注意到他们的解析工具发生了这个问题,或者我们需要为 lld 链接器添加一些特定的标志。
    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2018-07-08
    • 2015-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多