Cómo obtener ndk-gdb trabajando en Android?

Estoy tratando de conseguir el depurador NDK trabajando, pero sin éxito hasta ahora.

Para asegurarme de que mis símbolos de depuración están presentes y son válidos, utilizo las opciones -O0 y -g del compilador y el parámetro NDK_DEBUG = 1 de la compilación ndk.

El script ndk-gdb se ejecuta sin problemas y lanza GDB. Cuando hago un comando "sharedlibrary", consigo esto:

Symbols already loaded for /bla/bla/libMySharedLib.so 

Sin embargo, cuando intento romper la ejecución o, por ejemplo, agregar un segfault a prueba, nunca obtengo ninguno de los símbolos de esa biblioteca en la pila de llamadas. Los únicos símbolos que he conseguido son de libc, si rompo la ejecución mientras que está esperando un mutex por ejemplo. También intentó añadir puntos de interrupción sin suerte. GDB me permite añadir los puntos de interrupción, y el código funciona bien, pero los puntos de interrupción nunca se activan.

Estoy utilizando el nivel 8 de la API, ya que necesito para apoyar a Android 2.2 (Froyo).

¿Qué estoy haciendo mal?

Gracias por tu tiempo.

No es necesario utilizar los modificadores -O0 o -g. Debe realizar una de las siguientes acciones:

  1. Poner android:debuggable="true" a la etiqueta <application> en el archivo AndroidManifest.xml
  2. Utilice NDK_DEBUG=1 después de ndk-build
  3. Poner APP_OPTIM := debug en el archivo Application.mk

Hacer cualquiera de estas tres cosas usará automáticamente los modificadores -O0 y -g.

¿Puedes intentar ejecutar gdb manualmente, sin script gdb? Implica los siguientes pasos:

  1. gdbserver archivo gdbserver a /data/local folder en el dispositivo
  2. gdbserver :5055 --attach PID su aplicación y invocando en el comando de adb shell gdbserver :5055 --attach PID , donde PID es su id de proceso de aplicación.
  3. adb forward tcp:5055 tcp:5055 en host
  4. arm-linux-androideabi-gdb.exe desde la carpeta de tu aplicación
  5. Introducir los siguientes comandos en gdb
  6. set solib-search-path obj/local/armeabi
  7. file obj/local/armeabi/libMySharedLib.so
  8. target remote :5055

Y ver si puedes depurar entonces.

Si desea ver símbolos para otras bibliotecas compartidas, su librería está usando libc.so , luego jale desde el dispositivo (de la carpeta /system/lib ) a su carpeta obj/local/armeabi .

  • No es capaz de golpear el punto de interrupción en ndk-gdb en Android
  • Ndk-gdb con múltiples libs
  • Android NDK + GDB
  • Los rastreos de la pila se detienen antes de llegar a mi código (en Android usando NDK)
  • Android ndk-gdb no carga símbolos
  • Android NDK encontrar vínculo dinámico: incapaz de depurar la biblioteca
  • No se puede conectar el ndk-gdb a la aplicación android
  • No se puede depurar con gdb bajo Android y NDK, iniciar Gdb se bloquea la aplicación
  • Android gdb error, "No se puede acceder a la memoria en la dirección"
  • Integración de android ndk ndk-gdb con emacs?
  • Ptrace devuelve -1 en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.