当我的 Android 应用程序崩溃(或命中断言)时,我永远不会收到超过四行的回溯。在搜索类似的问题时,我只发现一两个地方提到了这一点,并且常见的回复是:“确保它是调试版本”和“你可能有堆栈损坏”。我见过许多地方发生了许多崩溃,但帧看起来很准确,而且没有损坏的证据。
以下是在调试构建中断言失败后摘自“adb logcat”的典型摘录:
I/DEBUG ( 187): d28 3f824fc6ced25306 d29 3fabdfebb8fe14dc
I/DEBUG ( 187): d30 fff0000000000000 d31 fffffffeffffffd2
I/DEBUG ( 187): scr 88000010
I/DEBUG ( 187):
I/DEBUG ( 187): backtrace:
I/DEBUG ( 187): #00 pc 00018516 /system/lib/libc.so
I/DEBUG ( 187): #01 pc 0000dc44 /system/lib/libc.so (abort+4)
I/DEBUG ( 187): #02 pc 0000168d /system/lib/liblog.so (__android_log_assert+88)
I/DEBUG ( 187): #03 pc 00170bcc /data/data/com.jsam.crag/lib/libmain.so (sim::TouchObserverController::HandleEvent(SDL_Event const&)+340)
I/DEBUG ( 187):
I/DEBUG ( 187): stack:
I/DEBUG ( 187): 6f4be770 6f4be76c [stack:17025]
I/DEBUG ( 187): 6f4be774 00000000
I/DEBUG ( 187): 6f4be778 00000000
正如您所看到的,大多数可用的回溯甚至不在我自己的代码中。我正在开发一款具有开箱即用操作系统的开发者版本 HTC One,使用 NDK 版本 8e 并针对 android-10 进行构建,尽管 android-15 也没有什么不同。我使用的是工具链 v4.7,gnuSTL_static STL 和我的 C++ 标志是:
-std=c++11 -g -pthread -DPROFILE -D__STRICT_ANSI__ -DdSINGLE -Wall -Wextra -Wfatal-errors -fno-rtti -fno-exceptions
我如何获得更长(最好是完整)的回溯?
最佳答案
您可以使用 gdb 在 Android 上进行 native 应用程序调试,请参阅 Generate core dump in android
这可以为您提供的不仅仅是堆栈跟踪。
关于android - logcat 中的回溯不完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17633866/