如何逐步使用ndk-stack?

时间:2019-01-12 14:48:47

标签: android android-ndk ndk-build ndk-stack

我正在尝试调试此错误:

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中使用Android NDK下载了sdk manager,现在在我的ndk-bundle目录中有一个sdk文件夹。

我已在error.txt中保存了以上错误日志,并希望理解一下。 根据此documentation,我认为我应该使用-dump选项。

$NDK/ndk-stack -sym $PROJECT_PATH/obj/local/armeabi-v7a -dump error.txt

文档说:

  

要使用ndk-stack,首先需要一个目录,其中包含应用程序共享库的未压缩版本。

仅供参考,我不知道这可能是什么。

  

如果您使用ndk-build,则这些未剥离的共享库位于$ PROJECT_PATH / obj / local /中,即设备的ABI。

但是我没有目录,也不知道如何制作。

我从没用过ndk

我尝试了这个instruction,但是没有运气。甚至无法使make工作。 (讽刺)

您能给我逐步的指导吗?实际上是分步

TL; DR:

我有上面的错误日志,需要您帮助我理解它。

我对ndk以及您如何使用它一无所知。

感谢您的耐心配合。我知道这个问题可能很愚蠢。

1 个答案:

答案 0 :(得分:2)

不幸的是,此崩溃与NDK无关,在这种情况下,您无法从ndk-stack中学到任何东西。

让我解释一下。 ndk-stack是在您自己的本机代码中解密为崩溃日志的工具。在这里,您没有要调试的本机代码。该应用程序崩溃在系统库中,您无法获取此特定设备的调试信息(这些系统库的未压缩版本)。

如果您知道如何在Android模拟器上重现此崩溃,则有机会进一步调试此自然崩溃。但是最有可能的是,这个错误与本机代码无关。也许,您在废弃后试图在画布上绘画。