如何一步步使用ndk-stack?
How to use ndk-stack step-by-step?
我正在尝试调试此错误:
01-12 13:38:18.068 275-275/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-12 13:38:18.068 275-275/? I/DEBUG: Build fingerprint: 'samsung/a53gxx/a53g:5.0.2/LRX22G/A500HXXU1BOJ2:user/release-keys'
01-12 13:38:18.068 275-275/? I/DEBUG: Revision: '10'
01-12 13:38:18.068 275-275/? I/DEBUG: ABI: 'arm'
01-12 13:38:18.068 275-275/? I/DEBUG: pid: 19854, tid: 19854, name: arif.mercuryapp >>> com.hermessharif.mercuryapp <<<
01-12 13:38:18.068 275-275/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
01-12 13:38:18.098 275-275/? I/DEBUG: r0 00000000 r1 00000000 r2 00000001 r3 b6ecbf44
01-12 13:38:18.098 275-275/? I/DEBUG: r4 b879ebe0 r5 00000000 r6 be9e0c60 r7 00000000
01-12 13:38:18.098 275-275/? I/DEBUG: r8 00000000 r9 b93ee710 sl 00000000 fp be9e0ce8
01-12 13:38:18.098 275-275/? I/DEBUG: ip b51084dc sp be9e0c10 lr b4effde7 pc b6e67204 cpsr 600f0030
01-12 13:38:18.098 275-275/? I/DEBUG: backtrace:
01-12 13:38:18.098 275-275/? I/DEBUG: #00 pc 00090204 /system/lib/libandroid_runtime.so (GraphicsJNI::getNativeCanvas(_JNIEnv*, _jobject*)+11)
01-12 13:38:18.098 275-275/? I/DEBUG: #01 pc 00091c31 /system/lib/libandroid_runtime.so
01-12 13:38:18.098 275-275/? I/DEBUG: #02 pc 00277099 /system/framework/arm/boot.oat
01-12 13:38:19.468 275-275/? I/DEBUG: Tombstone written to: /data/tombstones/tombstone_04
我从this问题中了解到,我应该使用ndk-stack
来获取错误日志的含义。
所以我在 Android Studio 中使用 sdk manager
下载了 Android NDK
,现在我的 sdk
目录中有一个 ndk-bundle
文件夹。
我已经在 error.txt
中保存了上面的错误日志并且想弄明白它。
根据这个 documentation 我想我应该使用 -dump
选项。
$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump error.txt
文档说:
To use ndk-stack, you first need a directory containing unstripped versions of your app's shared libraries.
仅供参考,我不知道那可能是什么。
If you use ndk-build
, these unstripped shared libraries are found in $PROJECT_PATH/obj/local/, where is your device's ABI.
但是我没有目录,不知道怎么制作
我从来没有用过ndk
。
我尝试了这个 instruction 但没有成功。甚至无法使 make
工作。 (讽刺)
你能给我一个循序渐进的指导吗?字面上 一步一步.
TL;DR:
我有上面的错误日志,需要你帮我理解。
我对 ndk
以及您如何构建它一无所知。
感谢您的耐心等待。我知道这个问题可能很愚蠢。
不幸的是,这次崩溃与 NDK 无关,在这种情况下您无法从 ndk-stack 中学到任何东西。
让我解释一下。 ndk-stack
是一种在您自己的本机代码中解密为崩溃日志的工具。在这里,您没有要调试的本机代码。此应用程序在系统库中崩溃,您无法获取此特定设备的调试信息(这些系统库的未剥离版本)。
如果您知道如何在 Android 模拟器上重现此崩溃,您就有机会进一步调试此本机崩溃。但最有可能的是,这是一个与本机代码无关的错误。也许,你试图在 canvas 被丢弃后绘制。
我正在尝试调试此错误:
01-12 13:38:18.068 275-275/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-12 13:38:18.068 275-275/? I/DEBUG: Build fingerprint: 'samsung/a53gxx/a53g:5.0.2/LRX22G/A500HXXU1BOJ2:user/release-keys'
01-12 13:38:18.068 275-275/? I/DEBUG: Revision: '10'
01-12 13:38:18.068 275-275/? I/DEBUG: ABI: 'arm'
01-12 13:38:18.068 275-275/? I/DEBUG: pid: 19854, tid: 19854, name: arif.mercuryapp >>> com.hermessharif.mercuryapp <<<
01-12 13:38:18.068 275-275/? I/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
01-12 13:38:18.098 275-275/? I/DEBUG: r0 00000000 r1 00000000 r2 00000001 r3 b6ecbf44
01-12 13:38:18.098 275-275/? I/DEBUG: r4 b879ebe0 r5 00000000 r6 be9e0c60 r7 00000000
01-12 13:38:18.098 275-275/? I/DEBUG: r8 00000000 r9 b93ee710 sl 00000000 fp be9e0ce8
01-12 13:38:18.098 275-275/? I/DEBUG: ip b51084dc sp be9e0c10 lr b4effde7 pc b6e67204 cpsr 600f0030
01-12 13:38:18.098 275-275/? I/DEBUG: backtrace:
01-12 13:38:18.098 275-275/? I/DEBUG: #00 pc 00090204 /system/lib/libandroid_runtime.so (GraphicsJNI::getNativeCanvas(_JNIEnv*, _jobject*)+11)
01-12 13:38:18.098 275-275/? I/DEBUG: #01 pc 00091c31 /system/lib/libandroid_runtime.so
01-12 13:38:18.098 275-275/? I/DEBUG: #02 pc 00277099 /system/framework/arm/boot.oat
01-12 13:38:19.468 275-275/? I/DEBUG: Tombstone written to: /data/tombstones/tombstone_04
我从this问题中了解到,我应该使用ndk-stack
来获取错误日志的含义。
所以我在 Android Studio 中使用 sdk manager
下载了 Android NDK
,现在我的 sdk
目录中有一个 ndk-bundle
文件夹。
我已经在 error.txt
中保存了上面的错误日志并且想弄明白它。
根据这个 documentation 我想我应该使用 -dump
选项。
$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump error.txt
文档说:
To use ndk-stack, you first need a directory containing unstripped versions of your app's shared libraries.
仅供参考,我不知道那可能是什么。
If you use
ndk-build
, these unstripped shared libraries are found in $PROJECT_PATH/obj/local/, where is your device's ABI.
但是我没有目录,不知道怎么制作
我从来没有用过ndk
。
我尝试了这个 instruction 但没有成功。甚至无法使 make
工作。 (讽刺)
你能给我一个循序渐进的指导吗?字面上 一步一步.
TL;DR:
我有上面的错误日志,需要你帮我理解。
我对 ndk
以及您如何构建它一无所知。
感谢您的耐心等待。我知道这个问题可能很愚蠢。
不幸的是,这次崩溃与 NDK 无关,在这种情况下您无法从 ndk-stack 中学到任何东西。
让我解释一下。 ndk-stack
是一种在您自己的本机代码中解密为崩溃日志的工具。在这里,您没有要调试的本机代码。此应用程序在系统库中崩溃,您无法获取此特定设备的调试信息(这些系统库的未剥离版本)。
如果您知道如何在 Android 模拟器上重现此崩溃,您就有机会进一步调试此本机崩溃。但最有可能的是,这是一个与本机代码无关的错误。也许,你试图在 canvas 被丢弃后绘制。