2010-12-17 115 views
12

我最近收到用户投诉,说我的应用崩溃了。我从用户的错误日志中提取了以下内容,并能够看到发生问题的原因:由于“检测到堆栈损坏:中止”而导致崩溃

12-17 10:31:12.446 I/PLAYLIST(3158): PreparePlaylist 
12-17 10:31:12.446 I/PLAYLIST(3158): URL: http://f69cbd7a-3d91-4bf5-b4c6-ddb1175cf9e9.d40f2093-2013-4ad9-aec2-e99b015d61ca.070305e7-a706-4626-9ecb-777835065841.groovera.com/listen.pls 
12-17 10:31:12.456 F/unknown (3158): stack corruption detected: aborted 
12-17 10:31:12.466 D/Zygote (2204): Process 3158 terminated by signal (6) 
12-17 10:31:12.471 I/ActivityManager(2256): Process com.android.Player:remote (pid 3158) has died. 

检测到堆栈损坏。太棒了,那我怎么知道为什么会这样呢?

我认为问题发生在这个特定的类,因为我期待更多的日志输出从它死亡之前。该类使用套接字下载播放列表并解析它。我怎么会损坏堆栈?我已经处理了C/C++中的堆栈溢出问题,但是如何在Java中处理它?

感谢您的帮助!

+0

如果您的代码正在阅读网址,请参阅[某些推荐](http://comments.gmane.org/gmane.comp.handhelds.android.devel/91510)。 – khachik 2010-12-17 16:34:30

+0

该主机名看起来很长 – bigstones 2010-12-17 16:54:24

+1

它远低于FQDN的253个字符的限制。 – Blrfl 2010-12-17 17:04:43

回答

8

该消息指示本机堆栈损坏。当使用gcc标志“-fstack-protector”时,插入检测堆栈缓冲区溢出的代码。

如果您的应用程序没有任何JNI代码,那么这可能是Android平台中的一个错误。

如果你有一种方法来重现这一点,请在b.android.com上提供一个bug详细信息。

+0

谢谢!是啊,没有JNI代码。纯java ...问题是我不能重现它,但我的应用程序的用户可以每次都这样... – Jona 2010-12-19 20:47:23