l_h89 2019-04-13 14:58 采纳率: 0%
浏览 5530

signal 6 (SIGABRT), code -6 (SI_TKILL)错误,需要addr2line定位错误代码的详细步骤

crash proc name : Thread-5
happen time : 2019-04-03 10:48:37
<>
cannot get valid ams trace info this time.
<>
pid: 2692, tid: 2733, name: Thread-5 >>> com.mxpipe.lih.mxpipe <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: 'java_vm_ext.cc:534] JNI DETECTED ERROR IN APPLICATION: JNI NewStringUTF called with pending exception java.lang.NumberFormatException: empty String'
r0 00000000 r1 00000aad r2 00000006 r3 00000008
r4 00000a84 r5 00000aad r6 c29ff5ac r7 0000010c
r8 00000000 r9 e58991b8 sl 0000000a fp c29ff5f8
ip c9545440 sp c29ff598 lr e6ca9cad pc e6ca374e cpsr 200f0030
backtrace:
#00 pc 0001a74e /system/lib/libc.so (abort+63)
#01 pc 0035ba5d /system/lib/libart.so (art::Runtime::Abort(char const*)+392)
#02 pc 0041b82d /system/lib/libart.so (android::base::LogMessage::~LogMessage()+452)
#03 pc 0024ddf5 /system/lib/libart.so (art::JavaVMExt::JniAbort(char const*, char const*)+1212)
#04 pc 0024df77 /system/lib/libart.so (art::JavaVMExt::JniAbortV(char const*, char const*, std::__va_list)+58)
#05 pc 000d609b /system/lib/libart.so (art::ScopedCheck::AbortF(char const*, ...)+42)
#06 pc 000d5c1b /system/lib/libart.so (art::ScopedCheck::CheckThread(_JNIEnv*)+274)
#07 pc 000d45c5 /system/lib/libart.so (art::ScopedCheck::Check(art::ScopedObjectAccess&, bool, char const*, art::JniValueType*)+596)
#08 pc 000ccd57 /system/lib/libart.so (art::CheckJNI::NewStringUTF(_JNIEnv*, char const*)+438)
#09 pc 00bc7071 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#10 pc 00bc7105 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#11 pc 00bb072d /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#12 pc 00bb07d3 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#13 pc 00bcdeb9 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#14 pc 00be3f21 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#15 pc 022777c5 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#16 pc 022773eb /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#17 pc 02277779 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#18 pc 02277791 /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#19 pc 0255854b /data/app/com.mxpipe.lih.mxpipe-BLdMLJLFE4s9FKr_u1cgKA==/base.apk (offset 0x500b000)
#20 pc 00047a1f /system/lib/libc.so (__pthread_start(void*)+22)
#21 pc 0001b31d /system/lib/libc.so (__start_thread+32)

    想用ndk中的addr2line来定位错误代码位置,但是不知道所需要的.so文件到底是哪个到底在哪里,项目中有引用aar包。
希望有大佬能解答一下,感谢万分!
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 21:53
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要使用addr2line工具来定位Android应用中发生的错误,你需要按照以下步骤操作:

    1. 准备环境:

      • 确保你已经安装了Android SDK和NDK(或者如果你正在使用ARM架构,还需要安装arm-as和arm-linux-gcc)。
      • 安装并配置好adb
    2. 编译应用程序: 在你的目标平台上构建应用。确保在编译过程中包含了正确的依赖库,并且没有遗漏任何必要的头文件。

    3. 生成符号表: 使用arm-linux-androideabi-gcc编译器生成符号表。这将包含关于每个函数、变量和其他内存对象的信息。你可以通过以下命令进行编译:

      arm-linux-androideabi-gcc -S your_application.jar
      

      这个命令会生成一个名为your_application.S的文件,它包含符号表信息。

    4. 使用addr2line: 配置addr2line工具以找到特定的错误。首先,确保你在~/.bashrc~/.zshrc中添加了以下行:

      export PATH=$PATH:/path/to/addr2line
      

      其中/path/to/addr2line是你的addr2line工具的实际路径。

      接下来,在终端中运行以下命令以查找错误:

      addr2line your_application.jar
      

      如果你想要查看具体的符号表条目,可以提供一些参数,例如:

      addr2line -v your_application.jar
      

      此时,addr2line将会打印出符号表条目的描述和地址,帮助你定位到错误发生的具体位置。

    5. 分析符号表: 仔细阅读这些条目,尝试理解它们代表什么以及它们如何引发错误。通常,这些条目会列出函数调用堆栈,显示哪些部分导致了错误的发生。

    6. 调试和修改: 根据addr2line提供的信息,检查代码逻辑是否有误,是否正确处理了异常情况等。必要时,根据实际错误消息调整代码实现。

    7. 重新编译: 如果问题仍然存在,请考虑重新编译应用,包括替换错误的部分,并再次使用addr2line工具定位问题。

    这个过程可能需要一些时间,因为addr2line可能会产生大量的输出,但随着你熟悉其工作原理,你会逐渐能够快速定位错误位置。

    评论

报告相同问题?