3

現在、Android プロジェクトでいくつかのコードのデバッグに取り組んでいます。

セカンダリ スレッドのブレークポイントに gdb をヒットさせる際に問題が発生しています。メイン スレッドに設定するとすべて正常に動作しますが、セカンダリ スレッドでブレークポイントに到達するとすぐにアプリがクラッシュします。

Web を検索したところ、ndk が古いバージョンの GDB を使用していると言う人もいましたが、これは現在は無関係のようです (ndk r8 に同梱されているバージョンは 7.3.1 であるため)。他の 1 つのサイトでは、含まれている gdb バージョンはマルチスレッド サポートなしでコンパイルされていると述べていましたが、これも確認できないようです。

追加の詳細:

  • デバイス: ネクサス S
  • OS: アンドロイド 4.1.1

これが関連しているかどうかはわかりませんが、デバッガーを実行中のアプリケーションに接続すると、次の出力が得られます (シンボルにのみ問題があるようです)。

warning: .dynamic section for "/home/sandy/workspace/tumbleweed/obj/local/armeabi-v7a/linker" is not at the expected address (wrong library or version mismatch?)
warning: Could not load shared library symbols for 78 libraries, e.g. libstdc++.so.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code.

また、ndk-gdb --verbose を実行したときの冗長出力は次のとおりです。

Android NDK installation path: /home/sandy/workspace/android-ndk-r8b
Using default adb command: /home/sandy/workspace/android-sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using ADB flags: 
Using auto-detected project path: .
Found package name: com.sandroid.tumbleweed
ABIs targetted by application: jni/../libs
/home/sandy/workspace/tumbleweed/libs/gtest-1.6.0
/home/sandy/workspace/tumbleweed/libs/gtest-1.6.0/lib/.libs/libgtest.a
armeabi-v7a
Device API Level: 16
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /home/sandy/workspace/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found device gdbserver: /data/data/com.sandroid.tumbleweed/lib/gdbserver
Found data directory: '/data/data/com.sandroid.tumbleweed'
Found running PID: 3539
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: adb_cmd shell run-as com.sandroid.tumbleweed lib/gdbserver +debug-socket --attach 3539
## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/com.sandroid.tumbleweed/debug-socket
## COMMAND: adb_cmd pull /system/bin/app_process ./obj/local/armeabi-v7a/app_process
Attached; pid = 3539
Listening on sockaddr socket debug-socket
118 KB/s (9572 bytes in 0.078s)
Pulled app_process from device/emulator.
## COMMAND: adb_cmd pull /system/bin/linker ./obj/local/armeabi-v7a/linker
844 KB/s (79976 bytes in 0.092s)
Pulled linker from device/emulator.
## COMMAND: adb_cmd pull /system/lib/libc.so ./obj/local/armeabi-v7a/libc.so
1662 KB/s (286500 bytes in 0.168s)
Pulled libc.so from device/emulator.

アプリがクラッシュすると、次のようになります。

Child terminated with signal = 5 
Child terminated with signal = 0x5 (SIGTRAP)
GDBserver exiting
4

1 に答える 1

0

これを投稿してからしばらく経ちましたが、私はそれを理解したのを覚えていると思います。私は最近 NDK バージョンを更新したばかりで、すべての参照を古い NDK ディレクトリに完全に移行していないことがわかりました。古い NDK ディレクトリをバックアップ ディレクトリに完全に移動した後、Eclipse プロジェクトで残っている参照を修正しました。再構築した後、これで問題が解決したようです。

TL;DR: NDK 参照が正しいことを確認してください。

于 2012-10-16T20:14:09.657 に答える