2010-12-17 167 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