微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以从Android应用程序的C ++回溯中找到函数名称?

如何解决是否可以从Android应用程序的C ++回溯中找到函数名称?

我正在调试我的应用程序,该应用程序具有很多C ++。即使它是在调试中编译的,并且C ++代码是由我自己的应用程序编译的(因此也在调试模式下编译),但我还是遇到了如下的崩溃回溯:

09-23 19:16:32.672 14123 14123 F DEBUG   : Build fingerprint: 'motorola/griffin/griffin:8.0.0/OPL27.76-71-2-3/3:user/release-keys'
09-23 19:16:32.672 14123 14123 F DEBUG   : Revision: 'p3b0'
09-23 19:16:32.672 14123 14123 F DEBUG   : ABI: 'arm64'
09-23 19:16:32.672 14123 14123 F DEBUG   : pid: 14078,tid: 14078,name: my_Flutter_app  >>> com.sergio_Lever.my_Flutter_app <<<
09-23 19:16:32.672 14123 14123 F DEBUG   : signal 6 (SIGABRT),code -6 (SI_TKILL),fault addr --------
09-23 19:16:32.675 14123 14123 F DEBUG   : Abort message: 'terminating with uncaught exception of type std::bad_optional_access: bad_optional_access'
09-23 19:16:32.675 14123 14123 F DEBUG   :     x0   0000000000000000  x1   00000000000036fe  x2   0000000000000006  x3   0000000000000008
09-23 19:16:32.675 14123 14123 F DEBUG   :     x4   fefeff7ee760d21f  x5   fefeff7ee760d21f  x6   fefeff7ee760d21f  x7   7f7f7f7fff7fff7f
09-23 19:16:32.675 14123 14123 F DEBUG   :     x8   0000000000000083  x9   18e2b086a928bab4  x10  0000000000000000  x11  0000000000000001
09-23 19:16:32.675 14123 14123 F DEBUG   :     x12  ffffffffffffffff  x13  0000000000000001  x14  0024287419403a06  x15  0000260af954a2fc
09-23 19:16:32.675 14123 14123 F DEBUG   :     x16  0000007fb44632f8  x17  0000007fb44049d4  x18  0000007fe861da5c  x19  00000000000036fe
09-23 19:16:32.675 14123 14123 F DEBUG   :     x20  00000000000036fe  x21  0000007fe861d828  x22  ffffff80ffffffc8  x23  0000007fe861d8e0
09-23 19:16:32.676 14123 14123 F DEBUG   :     x24  0000007fe861d7c0  x25  0000007fe861d800  x26  0000000000000000  x27  0000000000000001
09-23 19:16:32.676 14123 14123 F DEBUG   :     x28  0000000000000001  x29  0000007fe861d730  x30  0000007fb43b8d24
09-23 19:16:32.676 14123 14123 F DEBUG   :     sp   0000007fe861d6f0  pc   0000007fb44049dc  pstate 0000000060000000
09-23 19:16:32.682 14123 14123 F DEBUG   : 
09-23 19:16:32.682 14123 14123 F DEBUG   : backtrace:
09-23 19:16:32.682 14123 14123 F DEBUG   :     #00 pc 00000000000699dc  /system/lib64/libc.so (tgkill+8)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #01 pc 000000000001dd20  /system/lib64/libc.so (abort+88)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #02 pc 000000000009fffc  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0x3853000)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #03 pc 00000000000a0154  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0x3853000)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #04 pc 000000000009d044  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0x3853000)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #05 pc 000000000009c914  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0x3853000)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #06 pc 000000000009c870  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0x3853000)
09-23 19:16:32.682 14123 14123 F DEBUG   :     #07 pc 00000000007a25d0  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0xaef5000)
09-23 19:16:32.684 14123 14123 F DEBUG   :     #08 pc 00000000007a0ad4  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0xaef5000)
09-23 19:16:32.684 14123 14123 F DEBUG   :     #09 pc 00000000007a07e8  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0xaef5000)
09-23 19:16:32.684 14123 14123 F DEBUG   :     #10 pc 00000000007a0b50  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0xaef5000)
09-23 19:16:32.684 14123 14123 F DEBUG   :     #11 pc 00000000007a1890  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/base.apk (offset 0xaef5000)
09-23 19:16:32.684 14123 14123 F DEBUG   :     #12 pc 000000000000c46c  /data/app/com.sergio_Lever.my_Flutter_app-05UKts6YyVXBufMPQhp4Ew==/oat/arm64/base.odex (offset 0xa000)
09-23 19:16:33.509  1136  1136 E /system/bin/tombstoned: Tombstone written to: /data/tombstones//tombstone_00

我想在发布和调试模式下我都会得到相同的回溯。因此,如果该应用程序的某些用户向我发送了该回溯跟踪信息(我相信是在应用程序崩溃时通过google play发送反馈选项发送的),我是否可以找到这些函数的实际名称?也许正在看偏移量?

如果可能,为什么logcat至少在我的应用程序调试版本中不会在回溯中显示功能的真实名称

更新:

我发现了ndk-stack实用程序,我尝试过:

adb logcat | $ANDROID_NDK_HOME/ndk-stack -sym $PWD/android/app/.cxx/cmake/debug/armeabi-v7a/

Android NDK网站推荐

adb logcat | $NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a

但是我没有找到$PROJECT_PATH/obj/local/armeabi-v7a

ndk-stack工具为我提供了以下输出

Build fingerprint: 'motorola/griffin/griffin:8.0.0/OPL27.76-71-2-3/3:user/release-keys'
#00 0x00000000007b89b4 /data/app/com.sergio.my_Flutter_app-P3kaX9v7DTNaKtQvm2Eotg==/base.apk (offset 0x4716000)
#01 0x00000000007b9ca0 /data/app/com.sergio.my_Flutter_app-P3kaX9v7DTNaKtQvm2Eotg==/base.apk (offset 0x4716000)
#02 0x00000000007bb03c /data/app/com.sergio.my_Flutter_app-P3kaX9v7DTNaKtQvm2Eotg==/base.apk (offset 0x4716000)
#03 0x00000000007baf78 /data/app/com.sergio.my_Flutter_app-P3kaX9v7DTNaKtQvm2Eotg==/base.apk (offset 0x4716000)
#04 0x00000000007bac18 /data/app/com.sergio.my_Flutter_app-P3kaX9v7DTNaKtQvm2Eotg==/base.apk (offset 0x4716000)
#05 0x000000000006637c /system/lib64/libc.so (_ZL15__pthread_startPv+36)
#06 0x000000000001f178 /system/lib64/libc.so (__start_thread+68)
Crash dump is completed

,但这不会在回溯中显示函数名称

可能的原因:$PWD/android/app/.cxx/cmake/debug/armeabi-v7a/中没有.o或.a文件

我也尝试过

adb logcat | $ANDROID_NDK_HOME/ndk-stack -sym $PWD/build/app/intermediates/merged_native_libs/debug/out/lib/armeabi-v7a

在该文件夹中,确实存在我的.so文件,所以我认为这是正确的位置。但是,我得到的输出与以前相同:没有回溯功能名称

解决方法

发布和调试模式下我得到相同的回溯

如果这是heisenbug或堆栈破坏错误,则不正确,优化设置可以更改UB的行为,还有一些设置可以帮助消除噪音。

事后分析:add a filter

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。