2010-09-15 14 views
5

Eso es una pregunta sin importancia, pero básicamente quiero saber si puedo usar GDB en una aplicación compilada en i686-pc-mingw en una interfaz de Linux. compilador. Quiero depurar el programa resultante en el cuadro de ventanas de destino con referencias de código fuente, etc.Se puede usar GDB en una aplicación win32 compilada en forma cruzada en la plataforma de destino

¿Es posible? Y si es así, qué debo tener en cuenta (es decir, la misma versión de archivos mingw, mismos binutils, mismo pariente camino al código fuente, etc ...)?

Una cosa que me da un poco es que los números de versión de GCC y GDB no parecen coincidir. ¿Cómo se puede saber si las versiones serán compatibles?

Si estas preguntas suenan tontas es solo porque no he usado mucho GDB, es solo algo que quiero empezar a hacer, así que no estoy tratando de adivinar qué se rompió.

Respuesta

6

Sí, debería poder usar GDB en un host Linux para depurar un ejecutable que se ejecuta en i686-pc-mingw.

Terminología: el sistema i686-pc-mingw es su destino, el sistema Linux es su anfitrión.

  • Ya tiene un compilador linux -hosted que se dirige i686-pc-mingw.
  • Necesita construir un gdbserver para su objetivo (usando su compilador cruzado).
  • También debe compilar un gdb (utilizando el compilador cruzado nativo no). Ese gdb debe configurarse para --host=x86-linux y --target=i686-pc-mingw. Esto es efectivamente cross-gdb: se ejecuta en Linux, pero depura los ejecutables de mingw.

Ahora ejecute gdbserver :0 foo.exe (en el objetivo). Eso debería imprimir un número de puerto en el que gdbserver está a la escucha de conexiones.

Ejecute gdb foo.exe (en el host), y conéctese al objetivo remoto con target remote <windows-target-host-name>:<gdbserver-port-number>, y debería estar en el negocio.

P.S.
GCC y GDB son proyectos completamente separados, sus versiones no tienen nada que ver entre sí. Debería poder construir GDB usando cualquier versión relativamente reciente de GCC.

+0

Wow gracias. Tenía la sensación de que si esto podía hacerse, sería un proceso complejo, pero creo que puedo hacer lo que sugiere. Las dos máquinas tienen un ethernet de 1Gbps dedicado que las vincula y ya se comunican con las unidades de samba y los servidores X, por lo que la comunicación a través de otro servidor no es un problema. Gracias por su respuesta clara y detallada, especialmente porque la terminología puede ser confusa. – SpliFF

+0

Tengo un seguimiento si no te importa. ¿Puedes decirme por qué el gdb debe ser nativo? ¿Cuál es la razón para eso? – SpliFF

+0

Gracias. A partir de gdb7.9 '--target = i686-pc-mingw32' es obligatorio (** 32 ** adicional al final). Para compilar para Windows X64 también, pase '--target = i686-pc-mingw32, x86_64-pc-mingw' –

0

OK, resulta que esto es posible usando gdb "nativo".

Básicamente, descarga gdb.exe nativo (32 o 64 bit, para que coincida con su ejecutable), y compile su .exe "con símbolos de depuración" (por ejemplo, gcc -g source.c create a.exe).

Luego copie a.exe en su destino, ejecútelo como gdb a.exe y puede establecer puntos de interrupción, inspeccionar variables, etc. Si también desea acceder al código fuente mientras lo depura, puede copiar su código fuente a su Windows Box, luego ejecute gdb a.exe desde el directorio donde se encuentra su fuente, para que se alinee. Necesitarás/querrás una copia textual de la fuente, por supuesto, pero luego tienes un depurador nativo con fuente completa.

Si desea ejecutar el depurador "desde Linux" (un beneficio es un acceso más fácil a la fuente actualizada) mientras su programa se ejecuta en su cuadro de Windows, entonces vea la otra respuesta. Supongo que también existe la posibilidad de utilizar un depurador de vinos para ejecutarlo "en Linux", aunque nunca he intentado de esa manera.

Cuestiones relacionadas