2

しばらくネイティブ ライブラリをデバッグしようとしていますが、うまくいきません。ネイティブ コードは動作し、コンパイルされますが、最適化のためにネイティブ コードをデバッグする必要があります。

多くのチュートリアル (例: tutorial1tutorial2 ) を段階的に読んで実行しましたが、解決策が見つからないエラーがいくつか発生します。

Android と C++ のデバッグ構成をセットアップしました。Android のデバッグ構成でデバッグした後、ライブラリ (1 つだけ) を読み込んだ後にブレークポイントにヒットします。cygwin にアクセスして、自分のデバイスが検出されているかどうかを確認します (これは検出されています)。次に実行します。

$ ndk-gdb --start --verbose

次の出力が得られます。

Android NDK installation path: /cygdrive/c/Android/android-ndk/android-ndk-r8
Using default adb command: /cygdrive/c/Android/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.mypackage
ABIs targetted by application: armeabi-v7a
Device API Level: 15
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi-v7a
Using gdb setup init: ./libs/armeabi-v7a/gdb.setup
Using toolchain prefix: /cygdrive/c/Android/android-ndk/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/windows/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi-v7a
Found debuggable flag: true
Found device gdbserver: /data/data/com.mypackage/lib/gdbserver
Found data directory: '/data/data/com.mypackage'
Found first launchable activity: .MainActivity
Launching activity: com.mypackage/.MainActivity
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell am start -n com.mypackage/.MainActivity
Starting: Intent { cmp=com.mypackage/.MainActivity }
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell sleep 2
Found running PID: 6907
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb shell run-as com.mypackage lib/gdbserver +debug-socket --attach 6907
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb forward tcp:5039 localfilesystem:/data/data/com.mypackage/debug-socket
Attached; pid = 6907
Could not open remote device: Invalid argument.
Detaching process(es): 6907
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb pull /system/bin/app_process obj/local/armeabi-v7a/app_process
2405 KB/s (9852 bytes in 0.004s)
Pulled app_process from device/emulator.
## COMMAND: /cygdrive/c/Android/android-sdk/platform-tools/adb pull /system/lib/libc.so obj/local/armeabi-v7a/libc.so
4994 KB/s (286412 bytes in 0.056s)
Pulled libc.so from device/emulator.

User@This-PC /cygdrive/c/Development/MyAppAndroid/trunk/MyApp
$

gdbserver が正常に起動されたことがわかります。これは良いことですが、なぜこのようなことが起こるのかわかりません。

Could not open remote device: Invalid argument

adb はデバイスに接続できるため (以前にテストしたように)。その後、gdbはすべてを閉じるだけで、eclipseでのc ++デバッグも失敗するように思えます(私はcygwinにあまり精通していません)。実行すると、次のエラーが表示されます。

76-target-select remote localhost:5039
&"Remote communication error: Bad file descriptor.\n"
Remote communication error: Bad file descriptor.
76^error,msg="Remote communication error: Bad file descriptor."

私のデバイスがadbによって検出されないようにするものはありますか? 私はこのデバイスをテストに (C++ デバッグなしで) 常に問題なく使用しています。

それとも、問題はポート エラーにありますか?

4

1 に答える 1

3

同じ問題が発生したため、ndk-gdb ファイルの次の行を置き換えました。

オリジナル:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver +$DEBUG_SOCKET --attach $PID & 

置換:

run adb_cmd shell run-as $PACKAGE_NAME lib/gdbserver tcp:5888 --attach $PID & 

そしてオリジナル:

run adb_cmd forward tcp:$DEBUG_PORT localfilesystem:$DATA_DIR/$DEBUG_SOCKET 

置換:

run adb_cmd forward tcp:5039 tcp:5888

これにより、「無効な引数」の問題が修正されました。

P.

于 2013-06-05T08:54:33.247 に答える