2010-09-09 30 views
7

Aprendí sobre la herramienta de depuración de "ndk-gdb" de Android NDK r4. Ahora puedo comenzar a depurar la muestra hello-jni (aunque existe algún problema).ndk-gdb con múltiples libs

Pero, para mis propias aplicaciones de Android, tengo varias bibliotecas para usar, construir a partir de una gran cantidad de archivos c/C++. Solía ​​construir estos archivos para ndk-build y luego copié estos archivos en el directorio $ PROJECT/libs, y funciona bien sin depuración. Pero ahora quiero depurar uno para lib con ndk-gdb. Cuando comencé ndk-gdb, se queja de que no se cargó ninguna tabla de símbolos.

También copio todos estos archivos para $ PROJECT/bin/ndk/local/armeabi (parece el directorio predeterminado donde gdb intenta cargar la tabla de símbolos). Y aún así, no funciona.

¿Quizás ndk-gdb no puede rastrear mis archivos después de que los copie? ¿O por qué no puede cargar tablas de símbolos, incluso después de copiarlas en $ PROJECT/bin/ndk/local/armeabi?

¿Alguien se ha encontrado con este problema antes?

¡Muchas gracias!

Respuesta

10

Creo que los está copiando en la carpeta incorrecta. El viejo NDK copió archivos a la carpeta bin; el nuevo los copia a la carpeta obj, y ahí es donde señala gdb para buscar símbolos.

Además, asegúrese de copiar los archivos .so previamente eliminados a la carpeta obj, y no a los mismos archivos que copie en la carpeta libs: como parte del proceso de compilación, los archivos en la carpeta libs tienen sido despojado de símbolos e información de depuración. Por lo tanto, deseará conservar dos copias de cada uno de sus archivos .so: uno de la carpeta libs para instalar en el dispositivo Android y otro de la carpeta obj para instalar para que GDB obtenga símbolos.

Puede, en lugar de copiar los archivos de depuración a la carpeta obj en el árbol de su aplicación, agregar las otras carpetas obj/carpetas del directorio de compilación a la ruta de búsqueda de símbolos de gdb. ndk-build configura un archivo, gdb.setup, que incluye una línea que comienza con establece solib-search-path. Puede poner una ruta separada por dos puntos en esa línea que incluya todas sus carpetas obj/local/whatever de destino, y luego gdb encontrará los símbolos.

+0

Muchas gracias por su respuesta! Voy a probar tu solución mañana. Y, ¿podría ofrecer más documentos sobre el proceso de construcción interna de NDK? Algo así como "desnudo", nunca lo escuché. – MaratSafinWang

+1

Vea el comando de Unix "strip": http://unixhelp.ed.ac.uk/CGI/man-cgi?strip - solo tenga cuidado si escribe "man strip" en Google en el trabajo. Me sorprendió en los primeros enlaces. :) – SomeCallMeTim

+0

En cuanto a otros pasos del proceso de compilación, esto se documenta en docs/OVERVIEW.TXT en el paquete NDK: "El último paso copiará, en caso de éxito, las bibliotecas compartidas depuradas que su aplicación necesita para el proyecto raíz de su aplicación directorio." – SomeCallMeTim

Cuestiones relacionadas