使用Android NDK和Firebase Crashlytics实现C++崩溃日志符号化
使用Firebase Crashlytics记录崩溃日志是一个好的实践,但是默认情况下它只能符号化Java和Kotlin代码,而对于C++代码则不能进行符号化,这使得C++崩溃日志难以调试。要解决这个问题,我们可以使用Android NDK来实现C++崩溃日志符号化。下面是具体步骤:
#include
#include
#include
void generateCrash() {
int* ptr = NULL;
*ptr = 10;
}
extern "C" JNIEXPORT jstring JNICALL
Java_com_example_crashlyticssymbolication_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
generateCrash();
return env->NewStringUTF("Hello from C++");
}
在应用崩溃后,崩溃日志的C++部分看起来像这样:
********** Crash dump: **********
Build fingerprint: 'google/sdk_gphone_x86/generic_x86:9/PSR1.180720.093/5082257:user/release-keys'
pid: 15527, tid: 15527, name: crashlyticssymbolication >>> com.example.crashlyticssymbolication <<<
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000000
x0 00000000 x1 00000000 x2 00000000 x3 00000000
x4 00000000 x5 00000000 x6 00000000 x7 00000000
x8 00000000 x9 00000000 x10 00000000 x11 00000000
x12 00000000 x13 00000000 x14 00000000 x15 00000000
x16 0000007d x17 0000007d x18 00000000 x19 00000000
x20 00000000 x21 00000000 x22 00000000 x23 00000000
x24 00000000
上一篇:AndroidNDK的System.loadLibrary为什么要尝试加载SONAME?
下一篇:AndroidNDK和Bento4-Undefinedreferenceto'AP4_Ac4SampleDescription::_class_AP4_Ac4SampleDescription'