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:
- ¿Produce código NDK optimizado para múltiples arquitecturas?
- Android: los sockets nativos no eliminan el modo de suspensión 3G en el primer intento
- Popen en android NDK
- Android.mk - Cómo montar y enlazar archivos de ensamblador ARM
- Error: No se encontraron toolchains en la carpeta de cadenas de herramientas NDK para ABI con prefijo: llvm
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!!
- Índices de eventos multitouch para Android
- No se pudo instanciar com.android.menubar.internal.MenuBarEnhancerCocoa
- Tomar una foto con android ndk - camera api
- Cómo imprimir en la pantalla de Android de código nativo en NDK?
- Redireccionamiento de STDIN y STDOUT del programa C en Android
- Sistema de construcción Android-NDK (edificio hello-gl2)
- Creación de aplicaciones NDK con Android ADT en Windows
- Android ndk freetype2
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
.
-
Llame a
ndk-build
con el indicador de depuración.ndk-build clean all NDK_DEBUG=1
-
Vuelva a instalar la aplicación.
-
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
- Rendimiento lento de la vista web de Android
- Cocos2d-js: ¿Cómo usar una fuente ttf personalizada en los dispositivos Android?