NDKr6bを使用して2.3.6デバイスでマルチスレッドAndroidアプリをデバッグしようとしています。私もNDKr8を使ってみましたが、同じ結果になりました。ブレークポイントに到達するたびに、アプリがクラッシュします。「スレッドのサポート」セクションのNDKr5bドキュメントで説明されているケースに入っているようです。
これが実際に意味することは次のとおりです。 -Android 2.3を使用している場合、または以前のプラットフォームリリースで プラットフォームのバグ修正がバックポートされ、ネイティブでデバッグできるようになります 自動的にスレッドします。 -そうでない場合は、メインスレッドのみをデバッグできます (以前のNDKリリースと同様)。次のメッセージも表示されます ndk-gdbを起動するとき(gdbプロンプトの直前): このAndroidプラットフォームでは、スレッドのデバッグはサポートされていません。 非メインスレッドで実行される関数にブレークポイントを設定すると、 プログラムは終了し、GDBに次のメッセージが表示されます。 プログラムはシグナルSIGTRAP、トレース/ブレークポイントトラップで終了しました。 プログラムはもう存在しません。
記載されている正確なエラーが表示されます。Thread debugging is unsupported on this Android platform!
ndk-gdbを実行するとわかるので、このケースに陥っていると思います。私が言ったように、私はジンジャーブレッドデバイスを使用してい<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="9"/>
て、マニフェストにあるので、このケースに入る必要はありません。
クラッシュするために私が従う手順の詳細は次のとおりです。
- Eclipseからのデバッグを使用してアプリを起動します
- ネイティブライブラリがロードされるSystem.loadLibraryの後に設定したブレークポイントにヒットします
- 私のプロジェクトディレクトリで、ndk-gdb --force--verbose--startを実行します
- gdbが正常に起動し、接続されている
- gdbにブレークポイントを設定し、Eclipseで続行してから、gdbで続行します
- クラッシュ!
編集されたコンソールダンプについては、以下を参照してください。
なぜこれが起こるのかについてのフィードバックをいただければ幸いです。
$ ndk-gdb --force --verbose --start Android NDKのインストールパス:/ Users / tony / Documents / android-ndk-r8 デフォルトのadbコマンドの使用:/ Users / tony / Documents / android-sdk-mac_86 / platform-tools / adb 見つかったADBバージョン:AndroidDebugBridgeバージョン1.0.29 ADBフラグの使用: 自動検出されたプロジェクトパスの使用:。 見つかったパッケージ名:com.mycompany.myapp アプリケーションの対象となるABI:armeabi デバイスAPIレベル:10 デバイスCPUABI:armeabi-v7a armeabi 互換性のあるデバイスABI:armeabi gdb setup initの使用:./ libs / armeabi / gdb.setup ツールチェーンプレフィックスの使用:/Users/tony/Documents/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/darwin-x86/bin/arm-linux-androideabi- アプリ出力ディレクトリの使用:./ obj / local / armeabi デバッグ可能なフラグが見つかりました:true 見つかったデバイスgdbserver:/data/data/com.appMobi.applab/lib/gdbserver 見つかったデータディレクトリ:'/data/data/com.mycompany.myapp' 最初に起動可能なアクティビティが見つかりました:.MainActivity 起動アクティビティ:com.mycompany.myapp / .MainActivity ##コマンド:/ Users / tony / Documents / android-sdk-mac_86 / platform-tools / adb shell am start -n com.mycompany.myapp / .MainActivity 開始:インテント{cmp = com.mycompany.myapp / .MainActivity} 警告:アクティビティは開始されていません。現在実行中の最上位のインスタンスにインテントが配信されています。 ##コマンド:/ Users / tony / Documents / android-sdk-mac_86 / platform-tools / adb shell sleep 2 実行中のPIDが見つかりました:7341 gdbserverを正常に起動しました。 ネットワークリダイレクトを設定する ##コマンド:/ Users / tony / Documents / android-sdk-mac_86 / platform-tools / adb forward tcp:5039 localfilesystem:/data/data/com.mycompany.myapp/debug-socket ##コマンド:/ Users / tony / Documents / android-sdk-mac_86 / platform-tools / adb shell run-as com.appMobi.applab lib / gdbserver + debug-socket --attach 7341 ##コマンド:/ Users / tony / Documents / android-sdk-mac_86 / platform-tools / adb pull / system / bin / app_process ./obj/local/armeabi/app_process 添付; pid = 7341 sockaddrソケットのデバッグソケットをリッスンしています 184 KB / s(0.030秒で5720バイト) デバイス/エミュレーターからapp_processをプルしました。 ##コマンド:/Users/tony/Documents/android-sdk-mac_86/platform-tools/adb pull /system/lib/libc.so ./obj/local/armeabi/libc.so 4347 KB / s(0.061秒で273940バイト) デバイス/エミュレーターからlibc.soをプルしました。 GNU gdb 6.6 Copyright(C)2006 Free Software Foundation、Inc. GDBはGNUGeneralPublic Licenseの対象となる自由ソフトウェアであり、あなたは 特定の条件下で変更および/またはコピーを配布することを歓迎します。 「showcopying」と入力して条件を確認します。 GDBの保証は一切ありません。詳細については、「保証の表示」と入力してください。 このGDBは、「-host = x86_64-apple-darwin --target=arm-elf-linux」として構成されました。 (デバッグシンボルが見つかりません) 共有ライブラリセクションのマッピング中にエラーが発生しました: ...共有ライブラリマッピングエラーが省略されました... このAndroidプラットフォームでは、スレッドのデバッグはサポートされていません。 このAndroidプラットフォームでは、スレッドのデバッグはサポートされていません。 警告:ダイナミックリンカブレークポイント関数が見つかりません。 GDBは共有ライブラリ初期化子をデバッグできなくなります 明示的にロードされた動的コードを追跡します。 警告:共有ライブラリハンドラーがブレークポイントを有効にできませんでした /Developer/AppMobiAndroid/AppLab/obj/local/armeabi/libc.soからのepoll_wait()の0xafd0c5ac このAndroidプラットフォームでは、スレッドのデバッグはサポートされていません。 (gdb)break dcanvas.cpp:544 0x81833c8aのブレークポイント1:ファイル/Developer/AppMobiAndroid/AppLab/jni/dcanvas.cpp、行544。 (gdb)c 続行します。 子はシグナル=5で終了しました プログラムはシグナルSIGTRAP、トレース/ブレークポイントトラップで終了しました。 プログラムはもう存在しません。 (gdb) シグナル=0x5で終了した子(SIGTRAP) GDBserverが終了します