what r17b r16 r13 ndk android emacs gdb android-ndk

android - r17b - ndk r16



IntegraciĆ³n de ndk-gdb de ndk de android con emacs? (2)

¿Has probado esto?

Agregue android-sdk-mac_x86 / platform-tools y android-ndk-r5b al entorno PATH. Después de eso, inicie el modo gdb con el script ndk-gdb.

M-x gdb Run gdb (like this): ndk-gdb --verbose --start --project=your_NDK_project_dir

¿Alguien me puede decir cómo ejecutar ndk-gdb desde emacs usando gdb-mode ? Actualmente lo estoy ejecutando en un búfer de shell . Lo que me encantaría tener es una forma de sincronizar automáticamente un búfer de archivo de origen con la PC actual en gdb cuando me detengo o paso. Algo más, como establecer saltos desde la fuente, los buffers que muestran gdb locales, etc., y los accesos directos clave para los comandos de gdb estarían llenos.

Antecedentes: estoy desarrollando GNU Emacs 23.1.90.1 (i386-apple-darwin10.5.0, NS apple-appkit-1038.35) del 2010-12-15 en OSX 10.6.6 con modo android, usando android-ndk-r5b y código java / c / c ++ mixto para un objetivo de Android.

El modo Android y el shell (ejecutando ndk-gdb) en emacs me permiten ver casi todo lo que necesito, pero mi configuración sería más conveniente si pudiera obtener un búfer de origen para sincronizarlo con el depurador u obtener el equivalente de lo que es Descrito en EmacsWiki here .

Para mi información, actualmente estoy usando eclipse para la depuración y el desarrollo del lado de Java, pero me resulta inestable y difícil de configurar para el trabajo nativo, a pesar de la disponibilidad de sequoyah , y además, eclipse no es un emacs.

[Adjunto]

Ejecutar Mx gdb con ndk-gdb como el comando gdb (ver más abajo) da como resultado un búfer llamado gud con un modelo que dice "(Debugger: run [initializing ...])". El búfer no acepta comandos gdb, ni tampoco comandos emacs gdb - (Ms, Mn, etc. resultan en <>

Salida:

Current directory is /Users/jpschelter/ Android NDK installation path: /Developer/android-ndk-r5b Using specific adb command: /Developer/android-sdk-mac_x86/platform-tools/adb ... ... ... ... (no debugging symbols found) warning: Unable to find dynamic linker breakpoint function. GDB will be unable to debug shared library initializers and track explicitly loaded dynamic code. 0xafd0e21c in nanosleep () from /Developer/Projects/ECS/DIGG/Projects/droid/obj/local/armeabi/libc.so (gdb) Undefined command: "1-inferior-tty-set". Try "help". (gdb) Undefined command: "2-gdb-set". Try "help". (gdb) Undefined command: "3-gdb-set". Try "help". (gdb) Undefined command: "4-file-list-exec-source-files". Try "help". (gdb) Undefined command: "5-file-list-exec-source-file". Try "help". (gdb) Undefined command: "6-gdb-show". Try "help". (gdb) Undefined command: "7-stack-info-frame". Try "help". (gdb) Undefined command: "8-thread-info". Try "help". (gdb) Undefined command: "9-break-list". Try "help".

Los buffers llamados *threads of* , *input/output of* y *breakpoints of* también se crean, pero están vacíos.

Navegando a través de la fuente gdb-mi.el de mis emacs, y comparando con la salida de gdb-debug-log , parece que gdb-mi está intentando enviar estos parámetros a un ejecutable gdb, pero gdb-server no responde a la ordena como se espera?

Tenga en cuenta que ejecutar Mx gud-gdb con la línea de comandos para ndk-gdb parece resultar en el equivalente de ejecutar ndk-gdb dentro de un shell, por lo que el problema parece estar dentro de la configuración de gdb-mode en emacs.


Tuve el mismo problema al ejecutar gdb bajo emacs: la ventana * gud * no respondía a los comandos. Sin embargo, ndk-gdb funcionaba bien en un shell. Para que funcione bajo la interfaz de usuario de emacs gud, tuve que modificar un poco el script ndk-gdb.

En la llamada a GDB (última línea), haga esto:

$GDBCLIENT --annotate=3 -x `native_path $GDBSETUP`

La opción --annotate = 3 es obligatoria para la interfaz de emacs gud, no puede funcionar sin ella (por eso * gud * no estaba respondiendo).

Pero estás a mitad de camino. Ahora funcionará, pero solo si invoca ndk-gdb mientras está en un búfer desde un archivo en la raíz del proyecto (como AndroidManifest.xml). Dado que esto es muy poco probable la mayoría de las veces, ya que usted es un programador de C / C ++ y las fuentes en las que está trabajando están bajo el directorio jni o más profundo, necesita hacer un poco más. El script ndk-gdb es un poco defectuoso y te confundirá felizmente con este (y gdb en sí tampoco ayudará mucho).

Busque en el script "PROJECT = $ OPTION_PROJECT". Estarás en una larga si ... más ... la cláusula fi se encarga de encontrar la raíz del proyecto (si no se ha dado con la opción --project, aunque hacerlo NO RESOLVERÁ el problema) hablar, ver más abajo). Después de la fi, agregue esta línea:

cd $PROJECT

Por alguna razón oscura, la secuencia de comandos NO se envía al directorio raíz del proyecto. Esto conduce a un comportamiento muy incorrecto cuando se trata del archivo gdb.setup en el que se supone que el script está en la raíz del proyecto. Añadir esta línea lo arreglará.

Asegúrese de llamar a ndk-gdb dentro de emacs con el comando usual:

(gdb "ndk-gdb ...")

No uses gud-gdb (curiosamente, esta es la antigua forma en que emacs usa gdb y no tiene nada que ver con la buena interfaz de usuario que estás buscando). Reemplace ... con sus argumentos, (concat ...) o cualquier cosa que desee. Recomiendo usar la opción --project de todos modos. Si no lo hace y está en un búfer para un archivo que está fuera del proyecto, el script no encontrará la raíz. Peor aún, si estás en un archivo en otro proyecto de Android, en su lugar encontrará la raíz de ese proyecto (tal vez incluso copiando gdb.setup y cosas en él antes de fallar en la sesión de gdb). Así que da esa maldita opción --proyecto. Si está utilizando el conjunto de comandos de escritorio de emacs, haga esto:

(gdb (concat "ndk-gdb --project=" desktop-dirname ...))

(Suponiendo que su .emacs.desktop esté en la raíz del proyecto, por supuesto).

Ahora puede finalmente depurar con la IU de gud, estableciendo puntos de interrupción en el nivel de origen. Tenga en cuenta que uso emacs 23.3.1 (gdb-ui.el), por lo que no es necesario tener 24 para que esto funcione.