1

私はAndroidネイティブアプリを何週間もデバッグモードで問題なく実行してテストしています。今日、Androidマニフェストで「debuggable」を「false」として選択し、ant release installを使用してビルドすることにより、リリースモードでテストすることにしました。

ただし、アプリを実行しようとすると、次のようなエラー メッセージが表示されます。

I/DEBUG ( 264): シグナル 7 (SIGBUS)、コード 1 (BUS_ADRALN)、障害アドレス 5c27f389

これは、データの配置エラーであると想定しています(Googleによると)。しかし、デバッグ可能をオンにするとすぐに、アプリはクラッシュしなくなりました。

このエラーの原因は何ですか? デバッグ可能をオフにしたときにのみクラッシュが発生するため、どこを見ればよいかさえわかりません。

4

1 に答える 1

0

SIGBUS は、不正なメモリアクセスが原因であるという点で SIGSEGV に似ています。デバッグをオンにすると、より大きなメモリ ブロックが使用されるため、これらの問題が目立たなくなります。これは、デバッグ バージョンにバグが存在しないという意味ではなく、クラッシュが発生していないことを意味するだけです。代わりに、厄介なメモリ破損が発生する可能性があります。

クラッシュが発生しているため、クラッシュ ダンプを取得しています。クラッシュ ダンプでは、アドレスと .so ファイルのコール スタックを取得します。

アドレスとモジュールを指定して addr2line を呼び出すと、アドレスが使用している関数を見つけることができます。完全な逆アセンブリが必要な場合は、objdump を使用できます。これらのプログラムの arm バージョンをインストールするか、android NDK に含まれているものを使用する必要があります。

于 2013-07-04T16:07:44.380 に答える