如何获取崩溃点在Java中code [英] How to get Crash Point in Java code

查看:618
本文介绍了如何获取崩溃点在Java中code的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的应用程序有 Android的支持 - v4.jar /库只。我不使用其他库。

我的应用程序与信号11错误而崩溃。我想使用 addr2line 的Andr​​oid的NDK工具。 可我们发现使用这个工具的java文件的功能和行号?任何帮助将是非常有益的这里

我的应用蓝牙Socket和介于两者之间我将结束在插座我怀疑,错误的是来,因为的write()被称为接近()插座但我无法找到确切的行或函数中的崩溃的我如何检查我在哪里做错了。

logcat的跟踪:

  D / CrashAnrDetector(831):11(SIGSEGV),code 1(SEGV_MAPERR),故障地址00000008
D / CrashAnrDetector(831):R0,R1 00000000 00000002 00000008 R2 R3 7a0efef0
D / CrashAnrDetector(831):R4 6d6a4800 R5 00000000 R6 4025df88 R7 00000000
D / CrashAnrDetector(831):R8 7b1d6b10 R9 791d3cc4 SL 79265220 FP 7b1d6b24
D / CrashAnrDetector(831):IP 401f004c SP 7b1d6ac8 LR 4172f41f PC 4172f426 CPSR 600f0030
D / CrashAnrDetector(831):0000000000000000 D0 D1 0000000000000000
D / CrashAnrDetector(831):0000000000000000 D2 D3 0000000000000000
D / CrashAnrDetector(831):D4 01000000亿D5 0000001000020000
D / CrashAnrDetector(831):D6 D7 3e4ccccd01fe1000 400000004bfb9b10
D / CrashAnrDetector(831):0000000000000000 D8 D9 0000000000000000
D / CrashAnrDetector(831):0000000000000000 D10 D11 0000000000000000
D / CrashAnrDetector(831):0000000000000000 D12 D13 0000000000000000
D / CrashAnrDetector(831):0000000000000000 D14 D15 0000000000000000
D / CrashAnrDetector(831):D16 D17 0064006e00650073 002e0067006e0069
D / CrashAnrDetector(831):D18 D19 006f006900730072 00310027003d006e
D / CrashAnrDetector(831):D20 D21 002000270030002e 006f0063006e0065
D / CrashAnrDetector(831):D22 D23 0067006e00690064 007400750027003d
D / CrashAnrDetector(831):D24 D25 0031003200320031 0036003500340033
D / CrashAnrDetector(831):0000000000000000 D26 D27 0000000000000000
D / CrashAnrDetector(831):D28 D29 001e001d001c001b 0020001f001d001e
D / CrashAnrDetector(831):D30 D31 0036003600360036 0000000000000000
D / CrashAnrDetector(831):SCR 80000013
D / CrashAnrDetector(831):回溯:
D / CrashAnrDetector(831):#00件0004f426 /system/lib/libdvm.so
D / CrashAnrDetector(831):#01件00001dad /system/lib/libnativehelper.so(jniGetFDFromFileDescriptor + 80)
D / CrashAnrDetector(831):#02件00075d11 /system/lib/libandroid_runtime.so
D / CrashAnrDetector(831):#03件00020e4c /system/lib/libdvm.so(dvmPlatformInvoke + 112)
D / CrashAnrDetector(831):#04件00051aef /system/lib/libdvm.so(dvmCallJNIMethod(无符号整型常量*,* JValue,方法常量*,螺纹*)+ 398)
D / CrashAnrDetector(831):#05件00000214的/ dev / ashmem /达尔维克jit- code-缓存(删除)


解决方案

您无法获取写在Java编程语言出的Dalvik虚拟机的本地堆栈跟踪code中的堆栈跟踪,很简单这Dalvik的使用不同的块内存本地和托管协议栈的原因。 (我相信这是可以从艺术崩溃得到它,因为艺术使用共享栈,但不能肯定地说。)

故障地址显示一个空指针引用,并通过通话jniGetFDFromFileDescriptor()表示文件的活动。你可以看到源$ C ​​$ C表示方法这里。我猜想它调用 GetIntField null对象,这会配合你的怀疑上。

启用CheckJNI 可以帮助 - 如果JNI检查斑点的问题,它通常会杀死VM之前转储当前线程的堆栈跟踪到日志文件。

My application has android-support-v4.jar in /libs only. I do not use other library.

My application is crashing with SIGNAL 11 error. I want to use addr2line utility of android-ndk. Can we find the function and line number of java file using this tool? Any help will be very helpful here

My application is writing to Bluetooth Socket and in between i am closing the socket I suspect, the error is coming because write() is called after close() of socket But I am not able to find exact line or function of crash How can i check where i am doing wrong

Logcat trace :

D/CrashAnrDetector(831): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000008
D/CrashAnrDetector(831):     r0 00000000  r1 00000002  r2 00000008  r3 7a0efef0
D/CrashAnrDetector(831):     r4 6d6a4800  r5 00000000  r6 4025df88  r7 00000000
D/CrashAnrDetector(831):     r8 7b1d6b10  r9 791d3cc4  sl 79265220  fp 7b1d6b24
D/CrashAnrDetector(831):     ip 401f004c  sp 7b1d6ac8  lr 4172f41f  pc 4172f426  cpsr 600f0030
D/CrashAnrDetector(831):     d0  0000000000000000  d1  0000000000000000
D/CrashAnrDetector(831):     d2  0000000000000000  d3  0000000000000000
D/CrashAnrDetector(831):     d4  0100000000000000  d5  0000001000020000
D/CrashAnrDetector(831):     d6  3e4ccccd01fe1000  d7  400000004bfb9b10
D/CrashAnrDetector(831):     d8  0000000000000000  d9  0000000000000000
D/CrashAnrDetector(831):     d10 0000000000000000  d11 0000000000000000
D/CrashAnrDetector(831):     d12 0000000000000000  d13 0000000000000000
D/CrashAnrDetector(831):     d14 0000000000000000  d15 0000000000000000
D/CrashAnrDetector(831):     d16 0064006e00650073  d17 002e0067006e0069
D/CrashAnrDetector(831):     d18 006f006900730072  d19 00310027003d006e
D/CrashAnrDetector(831):     d20 002000270030002e  d21 006f0063006e0065
D/CrashAnrDetector(831):     d22 0067006e00690064  d23 007400750027003d
D/CrashAnrDetector(831):     d24 0031003200320031  d25 0036003500340033
D/CrashAnrDetector(831):     d26 0000000000000000  d27 0000000000000000
D/CrashAnrDetector(831):     d28 001e001d001c001b  d29 0020001f001d001e
D/CrashAnrDetector(831):     d30 0036003600360036  d31 0000000000000000
D/CrashAnrDetector(831):     scr 80000013
D/CrashAnrDetector(831): backtrace:
D/CrashAnrDetector(831):     #00  pc 0004f426  /system/lib/libdvm.so
D/CrashAnrDetector(831):     #01  pc 00001dad  /system/lib/libnativehelper.so (jniGetFDFromFileDescriptor+80)
D/CrashAnrDetector(831):     #02  pc 00075d11  /system/lib/libandroid_runtime.so
D/CrashAnrDetector(831):     #03  pc 00020e4c  /system/lib/libdvm.so (dvmPlatformInvoke+112)
D/CrashAnrDetector(831):     #04  pc 00051aef  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
D/CrashAnrDetector(831):     #05  pc 00000214  /dev/ashmem/dalvik-jit-code-cache (deleted)

解决方案

You can't get the stack trace for code written in the Java programming language out of a native stack trace in the Dalvik VM, for the simple reason that Dalvik uses different pieces of memory for the native and managed stacks. (I believe it's possible to get it from Art crashes, because Art uses a shared stack, but can't say for certain.)

The fault address suggests a null pointer dereference, and the call through jniGetFDFromFileDescriptor() indicates file activity. You can see the source code for that method here. I would guess it's calling GetIntField on a null object, which would match with your suspicions.

Enabling CheckJNI may help -- if the JNI checker spots a problem, it will usually dump the current thread's stack trace to the log file before killing the VM.

这篇关于如何获取崩溃点在Java中code的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆