Cómo conseguir ndk-gdb trabajando en Android?


Estoy intentando que el depurador NDK funcione, pero hasta ahora no ha tenido éxito.

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

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

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

Sin embargo, cuando intento romper la ejecución o, por ejemplo, agregar una falla de segmento para probar, 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 espera un mutex, por ejemplo. También intentó agregar puntos de interrupción sin suerte. GDB me permite agregar los puntos de interrupción, y el código funciona bien, pero los puntos de interrupción nunca se activan.

Estoy usando el nivel de API 8 ya que necesito admitir Android 2.2 (Froyo).

1 answers

No es necesario utilizar los interruptores-O0 o-g. Necesitas hacer una de las siguientes cosas:

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

Al hacer cualquiera de estas tres cosas, se usarán automáticamente los interruptores - O0 y-g.

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

  1. empujando el archivo gdbserver a la carpeta /data/local en dispositivo
  2. ejecutando su aplicación e invocando en adb shell siguiendo el comando gdbserver :5055 --attach PID, donde PID es su id de proceso de aplicación.
  3. ejecutando {[9] } en el host
  4. ejecutando arm-linux-androideabi-gdb.exe desde la carpeta de la aplicación
  5. introduciendo 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 se puede depurar entonces.

Si desea ver símbolos para otras bibliotecas compartidas que su biblioteca está utilizando como libc.so, luego jálelos desde el dispositivo (de la carpeta /system/lib) a tu carpeta obj/local/armeabi.

 65
Author: Mārtiņš Možeiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-02 08:54:43