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:
- ponga
android:debuggable="true"
a la etiqueta<application>
en el archivoAndroidManifest.xml
- use
NDK_DEBUG=1
después de ndk-build - 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:
- empujando el archivo
gdbserver
a la carpeta/data/local
en dispositivo - ejecutando su aplicación e invocando en
adb shell
siguiendo el comandogdbserver :5055 --attach PID
, donde PID es su id de proceso de aplicación. - ejecutando {[9] } en el host
- ejecutando
arm-linux-androideabi-gdb.exe
desde la carpeta de la aplicación - introduciendo los siguientes comandos en gdb
set solib-search-path obj/local/armeabi
file obj/local/armeabi/libMySharedLib.so
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
.
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