Depuración de Android ndk-gdb

He estado luchando con esto durante días y me he acercado pero todavía no hay suerte. Estoy tratando de construir una aplicación de Android a través de ndk-build NDK_DEBUG = 1 que funciona muy bien. Puedo lanzar desde eclipse y ejecutarlo, pero quiero depurar desde la línea de comandos. Así que he intentado diferentes enfoques con ndk-gdb y no han tenido suerte. He intentado "ndk-gdb –start –nowait –verbose", "ndk-gdb –start –verbose", "ndk-debug" y nada parece funcionar. Consigo una salida levemente diferente si saco la bandera del 'no-espera', sin embargo los mismos errores estallan para arriba …

Sin el indicador de no-wait:

Claudias-MacBook-Pro:Android claudia$ ndk-gdb --start --verbose Android NDK installation path: /Applications/Intel/INDE/Framework/NDK Using default adb command: /Applications/Intel/INDE/Framework/ADT/sdk/platform-tools/adb ADB version found: Android Debug Bridge version 1.0.31 Using ADB flags: Using JDB command: /usr/bin/jdb Using auto-detected project path: . Found package name: com.yourcompany.neckrowfish ABIs targetted by application: armeabi armeabi-v7a Device API Level: 19 Device CPU ABIs: x86 armeabi-v7a Compatible device ABI: armeabi-v7a Using gdb setup init: ./libs/armeabi-v7a/gdb.setup Using toolchain prefix: /Applications/Intel/INDE/Framework/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi- Using app out directory: ./obj/local/armeabi-v7a Found debuggable flag: true Found data directory: '/data/data/com.yourcompany.neckrowfish' Found device gdbserver: /data/data/com.yourcompany.neckrowfish/lib/gdbserver Found first launchable activity: .neckrowfish Launching activity: com.yourcompany.neckrowfish/.neckrowfish ## COMMAND: adb_cmd shell am start -D -n com.yourcompany.neckrowfish/.neckrowfish Starting: Intent { cmp=com.yourcompany.neckrowfish/.neckrowfish } ## COMMAND: adb_cmd shell sleep 2 Found running PID: 17094 Launched gdbserver succesfully. Setup network redirection ## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/com.yourcompany.neckrowfish/debug-socket ## COMMAND: adb_cmd shell run-as com.yourcompany.neckrowfish /data/data/com.yourcompany.neckrowfish/lib/gdbserver +debug-socket --attach 17094 ## COMMAND: adb_cmd pull /system/bin/app_process ./obj/local/armeabi-v7a/app_process Cannot attach to lwp 17094: Function not implemented (38) Exiting 2859 KB/s (12780 bytes in 0.004s) Pulled app_process from device/emulator. ## COMMAND: adb_cmd pull /system/bin/linker ./obj/local/armeabi-v7a/linker 5510 KB/s (183465 bytes in 0.032s) Pulled linker from device/emulator. ## COMMAND: adb_cmd pull /system/lib/libc.so ./obj/local/armeabi-v7a/libc.so 3730 KB/s (824333 bytes in 0.215s) Pulled libc.so from device/emulator. Setup JDB connection ## COMMAND: adb_cmd forward tcp:65534 jdwp:17094 java.io.IOException: handshake failed - connection prematurally closed at com.sun.tools.jdi.SocketTransportService.handshake(SocketTransportService.java:118) at com.sun.tools.jdi.SocketTransportService.attach(SocketTransportService.java:214) at com.sun.tools.jdi.GenericAttachingConnector.attach(GenericAttachingConnector.java:98) at com.sun.tools.jdi.SocketAttachingConnector.attach(SocketAttachingConnector.java:72) at com.sun.tools.example.debug.tty.VMConnection.attachTarget(VMConnection.java:358) at com.sun.tools.example.debug.tty.VMConnection.open(VMConnection.java:168) at com.sun.tools.example.debug.tty.Env.init(Env.java:64) at com.sun.tools.example.debug.tty.TTY.main(TTY.java:1010) Fatal error: Unable to attach to target VM. GNU gdb (GDB) 7.3.1-gg2 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android". For bug reporting instructions, please see: <http://source.android.com/source/report-bugs.html>. ./obj/local/armeabi-v7a/gdb.setup:4: Error in sourced command file: Remote connection closed (gdb) 

Esto causa una notificación de "esperando el depurador" en mi dispositivo android, así que con la bandera obtengo:

 Claudias-MacBook-Pro:Android claudia$ ndk-gdb --start --nowait --verbose Android NDK installation path: /Applications/Intel/INDE/Framework/NDK Using default adb command: /Applications/Intel/INDE/Framework/ADT/sdk/platform-tools/adb ADB version found: Android Debug Bridge version 1.0.31 Using ADB flags: Using JDB command: /usr/bin/jdb Using auto-detected project path: . Found package name: com.yourcompany.neckrowfish ABIs targetted by application: armeabi armeabi-v7a Device API Level: 19 Device CPU ABIs: x86 armeabi-v7a Compatible device ABI: armeabi-v7a Using gdb setup init: ./libs/armeabi-v7a/gdb.setup Using toolchain prefix: /Applications/Intel/INDE/Framework/NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi- Using app out directory: ./obj/local/armeabi-v7a Found debuggable flag: true Found data directory: '/data/data/com.yourcompany.neckrowfish' Found device gdbserver: /data/data/com.yourcompany.neckrowfish/lib/gdbserver Found first launchable activity: .neckrowfish Launching activity: com.yourcompany.neckrowfish/.neckrowfish ## COMMAND: adb_cmd shell am start -n com.yourcompany.neckrowfish/.neckrowfish Starting: Intent { cmp=com.yourcompany.neckrowfish/.neckrowfish } Warning: Activity not started, its current task has been brought to the front ## COMMAND: adb_cmd shell sleep 2 Found running PID: 17094 Launched gdbserver succesfully. Setup network redirection ## COMMAND: adb_cmd forward tcp:5039 localfilesystem:/data/data/com.yourcompany.neckrowfish/debug-socket ## COMMAND: adb_cmd shell run-as com.yourcompany.neckrowfish /data/data/com.yourcompany.neckrowfish/lib/gdbserver +debug-socket --attach 17094 ## COMMAND: adb_cmd pull /system/bin/app_process ./obj/local/armeabi-v7a/app_process Cannot attach to lwp 17094: Function not implemented (38) Exiting 2539 KB/s (12780 bytes in 0.004s) Pulled app_process from device/emulator. ## COMMAND: adb_cmd pull /system/bin/linker ./obj/local/armeabi-v7a/linker 4498 KB/s (183465 bytes in 0.039s) Pulled linker from device/emulator. ## COMMAND: adb_cmd pull /system/lib/libc.so ./obj/local/armeabi-v7a/libc.so 2676 KB/s (824333 bytes in 0.300s) Pulled libc.so from device/emulator. GNU gdb (GDB) 7.3.1-gg2 Copyright (C) 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "--host=x86_64-apple-darwin --target=arm-linux-android". For bug reporting instructions, please see: <http://source.android.com/source/report-bugs.html>. ./obj/local/armeabi-v7a/gdb.setup:4: Error in sourced command file: Remote connection closed (gdb) 

¿Alguien tiene alguna pista de lo que podría ser mi problema? ¡¡Gracias!!

Prueba – ndk-gdb.py

Este problema parece ser bastante común. Mi solución fue NO usar el ndk-gdb bash proporcionado. En cualquier caso, el guión bash no funcionó para mí y la versión python sí.

La versión de python podría incluirse en las versiones más recientes del NDK, pero si no, se puede obtener de la rama master de la fuente NDK .

Puede clonarlo en:

 git clone https://android.googlesource.com/platform/ndk 

Extraiga el archivo ndk-gdb.py y colóquelo en su carpeta NDK. Dado que he utilizado brew para instalar el NDK, r10c en el momento de escribir este documento, el NDK estaba en /usr/local/opt/android-ndk .

  1. Llame a ndk-build con el indicador de depuración.

    ndk-build clean all NDK_DEBUG=1

  2. Vuelva a instalar la aplicación.

  3. Inicie con gdb.

    ndk-gdb.py --start --verbose --project=/dir/with/android/xml

Si Eclipse está abierto, debe notar que el depurador viene a la vida.

Puedes probar:

 ndk-gdb --start --verbose --force --nowait 

Esto funciona para mi

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.