J'essaie de déboguer ma bibliothèque native depuis un certain temps maintenant et cela ne fonctionnera tout simplement pas. Le code natif fonctionne et se compile mais à des fins d'optimisation, il me faudrait vraiment déboguer le code natif.Débogage Android NDK: le périphérique ne peut pas être ouvert
J'ai lu et suivi de nombreux tutoriels (par exemple tutorial1, tutorial2) étape par étape, mais je reçois des erreurs pour lesquelles je ne trouve pas de solution.
J'ai configuré la configuration de débogage Android et C++ et après avoir débogué avec la configuration de débogage Android, il atteint le point d'arrêt après le chargement de la bibliothèque (un seul). Je vais à cygwin et voir si mon appareil est détecté (ce qu'il est). Ensuite, exécutez:
$ ndk-gdb --start --verbose
Ce qui me donne le résultat suivant:
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.
[email protected] /cygdrive/c/Development/MyAppAndroid/trunk/MyApp
$
je peux voir que le gdbserver a été lancé avec succès, ce qui est bon, mais je ne sais pas pourquoi cela se produit:
Could not open remote device: Invalid argument
car adb peut se connecter au périphérique (comme testé auparavant). Après cela, il me semble (je ne suis pas trop familier avec cygwin) que gdb ferme juste tout et que ça ferait échouer aussi le débogage C++ en eclipse. Lorsque je l'exécute, l'erreur suivante:
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."
Y at-il quelque chose qui pourrait empêcher mon périphérique d'être détecté par l'adb? J'utilise cet appareil pour tester (sans débogage C++) tout le temps sans problème.
Ou le problème réside-t-il dans l'erreur de port?
J'utilise la méthode dans votre lien et il fonctionne très bien (modifié pour armeabi-V7A) "tutoriel 1". J'ai remarqué que vous appelez ndk-gdb et non ndk-gdb-eclipse et que vous utilisez gdp.setup au lieu de gdb2.setup. Je suppose que vous avez abandonné la méthode dans le tutoriel? Quelle partie ne fonctionnait pas pour vous? – foo64
J'ai juste copié ndk-gdb et l'ai nommé ndk-gdb-original et utilisé le nom tel qu'il était pour mon nouveau fichier. même chose avec gdb.setup. Je soupçonnais ces changements de causer un problème mais ce n'était pas ça. donc ive a suivi toutes les étapes comme dans les tutoriels. La partie qui ne fonctionne pas est ** Impossible d'ouvrir le périphérique distant: Argument invalide ** et je ne sais pas pourquoi il ne se connecte pas car avant d'exécuter ndk-gdb je peux détecter le périphérique avec _adb devices_ – user1937376