Android native崩溃问题分析
最近在做NDK项目的时候,出现了启动应用就崩溃了,崩溃日志如下:
10:41:04.743 A Build fingerprint: 'samsung/g0qzcx/g0q:13/TP1A.220624.014/S9060ZCU4CWH1:user/release-keys'
10:41:04.743 A Revision: '12'
10:41:04.743 A ABI: 'arm64'
10:41:04.743 A Processor: '5'
10:41:04.743 A Timestamp: 2025-05-16 10:41:04.376681759+0800
10:41:04.743 A Process uptime: 2s
10:41:04.743 A Cmdline: com.virtual.video.i18n
10:41:04.743 A pid: 22011, tid: 22112, name: DefaultDispatch >>> com.virtual.video.i18n <<<
10:41:04.743 A uid: 11565
10:41:04.743 A tagged_addr_ctrl: 0000000000000001 (PR_TAGGED_ADDR_ENABLE)
10:41:04.743 A pac_enabled_keys: 000000000000000f (PR_PAC_APIAKEY, PR_PAC_APIBKEY, PR_PAC_APDAKEY, PR_PAC_APDBKEY)
10:41:04.743 A signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0000000000000000
10:41:04.743 A Cause: null pointer dereference
10:41:04.743 A x0 0000000000000000 x1 0000000000000000 x2 00000072024ba590 x3 00000072024ba578
10:41:04.743 A x4 0000000000000000 x5 8080000000000000 x6 00000072024ba5e1 x7 7f7f7f7f7fffffff
10:41:04.743 A x8 0000000000000000 x9 0000000000000004 x10 b40000733d478ec8 x11 fffffffffffffffc
10:41:04.743 A x12 0000000000000004 x13 b4000072dd479cd4 x14 00000000fffffffc x15 00000071a3bba0d0
10:41:04.743 A x16 00000071a39ea820 x17 00000075a90049c0 x18 0000007202cc2000 x19 0000000000000000
10:41:04.743 A x20 00000072024ba4f0 x21 00000072024ba578 x22 00000072024ba750 x23 00000072024ba5e1
10:41:04.743 A x24 00000072024bd000 x25 00000072024bd000 x26 00000072024ba799 x27 00000072024ba751
10:41:04.743 A x28 00000072024bd000 x29 00000072024ba4c0
10:41:04.743 A lr 00000071a39a30a4 sp 00000072024ba4b0 pc 00000075a90049d0 pst 0000000080001000
10:41:04.743 A backtrace:
10:41:04.743 A #00 pc 000000000004c9d0 /apex/com.android.runtime/lib64/bionic/libc.so (__strlen_aarch64+16) (BuildId: 54071c506231d1ab2d3653b44eddcea5)
10:41:04.743 A #01 pc 00000000000990a0 /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libc++_shared.so (std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >::assign(char const*)+24) (BuildId: fe1b5f695d356c857834778696686059de87f7f8)
10:41:04.743 A #02 pc 000000000035e0fc /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (NsComm::CSimpleLog::Init(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)+104) (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #03 pc 00000000002981a0 /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (QtLog::InitLog(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)+264) (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #04 pc 000000000029877c /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (QtLog::QtTrack_InitLog(int, char const*, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> >)+172) (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #05 pc 0000000000296cbc /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (NsQtTrack::QT_Track(int, char const*, char const*, char const*, char const*, char const*, char*)+680) (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #06 pc 0000000000297e60 /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (NsQtTrack::InnerTrack(char const*, char const*, char const*, char const*, char*)+1056) (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #07 pc 000000000021f414 /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (NsDrive::QtReport(Json::Value&)+692) (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #08 pc 000000000021f9a4 /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libwscorekit.so (BuildId: 276a833f5f553ef5dd1977429d564029b599b83e)
10:41:04.743 A #09 pc 00000000000047f8 /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/lib/arm64/libWondershareDrive.so (Java_com_wondershare_drive_WondershareDriveApi_nativeInit+108) (BuildId: a75ca5f6e52c9bc7beb5074f928f66ff12b835f9)
10:41:04.743 A #10 pc 0000000000461d54 /apex/com.android.art/lib64/libart.so (art_quick_generic_jni_trampoline+148) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #11 pc 000000000020a2b0 /apex/com.android.art/lib64/libart.so (nterp_helper+4016) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #12 pc 00000000004c1498 [anon:dalvik-classes18.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes18.dex] (com.wondershare.drive.WondershareDriveApi.init+132)
10:41:04.743 A #13 pc 000000000020a958 /apex/com.android.art/lib64/libart.so (nterp_helper+5720) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #14 pc 00000000000057f2 [anon:dalvik-classes10.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes10.dex] (com.virtual.video.app.ThirdSdkInitWrapper$initCloudStorage$1.invokeSuspend+254)
10:41:04.743 A #15 pc 000000000020a254 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #16 pc 000000000012d3a6 [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith+42)
10:41:04.743 A #17 pc 000000000020b120 /apex/com.android.art/lib64/libart.so (nterp_helper+7712) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #18 pc 0000000000176398 [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.DispatchedTask.run+448)
10:41:04.743 A #19 pc 000000000020b074 /apex/com.android.art/lib64/libart.so (nterp_helper+7540) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #20 pc 00000000001b04e2 [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.internal.LimitedDispatcher$Worker.run+10)
10:41:04.743 A #21 pc 000000000020b074 /apex/com.android.art/lib64/libart.so (nterp_helper+7540) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #22 pc 00000000001b80a2 [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.scheduling.TaskImpl.run+6)
10:41:04.743 A #23 pc 000000000020a254 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #24 pc 00000000001b716e [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely+2)
10:41:04.743 A #25 pc 000000000020a254 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #26 pc 00000000001b5d4a [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask+34)
10:41:04.743 A #27 pc 000000000020a254 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #28 pc 00000000001b5e78 [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker+56)
10:41:04.743 A #29 pc 000000000020a254 /apex/com.android.art/lib64/libart.so (nterp_helper+3924) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #30 pc 00000000001b5e28 [anon:dalvik-classes19.dex extracted in memory from /data/app/~~1RHMqel4j5AuIl27Q6XW7Q==/com.virtual.video.i18n-WAL7gWjRDiIYE7hIiUOjPA==/base.apk!classes19.dex] (kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run+0)
10:41:04.743 A #31 pc 000000000045836c /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+556) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #32 pc 00000000004841e4 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+156) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #33 pc 0000000000483eb0 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues<art::ArtMethod*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+400) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #34 pc 00000000005cc668 /apex/com.android.art/lib64/libart.so (art::Thread::CreateCallback(void*)+1680) (BuildId: 4c9b59b74ca9272f710a71137164c349)
10:41:04.743 A #35 pc 00000000000bb6e8 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208) (BuildId: 54071c506231d1ab2d3653b44eddcea5)
10:41:04.743 A #36 pc 0000000000054fdc /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68) (BuildId: 54071c506231d1ab2d3653b44eddcea5)
关键截图如下:
这时候需要借助堆栈翻译工具和带符号的so,找到对应堆栈。
工具对应的NDK目录如下:
ndk\21.4.7075529\toolchains\aarch64-linux-android-4.9\prebuilt\windows-x86_64\bin
通过查看堆栈信息:
可以看到发生崩溃的地址,然后使用命令:
aarch64-linux-android-addr2line.exe -e xxx.so -C -f -s 000000000035e0fc(上面标注的地址)
就可以得到结果:
NsComm::CSimpleLog::Init(std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)
还可以多看几个:
aarch64-linux-android-addr2line.exe -e xxx.so -C -f -s 00000000002981a0
得到结果:
QtLog::InitLog(int, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char> > const&)
这样就比较容易定位的出问题的方法。
如果是在Linux系统上,还可以通过nm命令来查看符号表。
nm -D xxx.so
感谢大家的支持,如有错误请指正,如需转载请标明原文出处!