13

最近、アプリがクラッシュしているという苦情をユーザーから受け取りました。ユーザーのエラーログから次の情報を抽出し、問題が発生する理由を確認できました。

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でどのように処理しますか?

ご協力いただきありがとうございます!

4

1 に答える 1

11

メッセージは、ネイティブスタックの破損を示しています。gccフラグ「-fstack-protector」を使用すると、スタックバッファオーバーフローを検出するコードが挿入されます。

アプリにJNIコードがない場合、これはAndroidプラットフォームのバグである可能性があります。

これを再現する方法がある場合は、b.android.comに詳細を記載したバグを報告してください。

于 2010-12-17T22:13:56.727 に答える