Pregunta

Traté de depuración remota una aplicación de 32 bits en Linux x86_64 suse, pero conseguir este "registro remoto con formato incorrecto" error.

pongo en marcha el gdbserver que escucha en el puerto 12345 (gdbserver localhost: 12345 My_Prog)

Y este es el error:

$ gdb
GNU gdb 6.6
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
(gdb) target remote <ip>:12345
Remote debugging using <ip>:12345
Remote register badly formatted: T0506:0000000000000000;07:80b8bcff00000000;10:4028f0f700000000;
here: 0000000;07:80b8bcff00000000;10:4028f0f700000000;
(gdb)

Esta es la máquina servidor de depuración (-a uname):

servidor Linux 2.6.16.60-0.31-smp # 1 SMP Mar Oct 7 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

Y esta es la máquina cliente de depuración (uname -a):

cliente Linux 2.6.16.54-0.2.5-default # 1 Lun Ene 21 de 2008 13:29:51 GMT x86_64 x86_64 x86_64 GNU / Linux

Las dos máquinas están ejecutando en máquinas virtuales, aunque (VMWare). El binario gdbserver se copia de la máquina cliente a la máquina servidor.

(I depuración remota debido a que el entorno de ejecución en el servidor de depuración es de producción-como, y no contiene ninguna herramienta de desarrollo, el acceso al código fuente, etc.)

Cualquier sugerencia es bienvenida.

ACTUALIZACIÓN: esto funcionó para mí emitiendo el siguiente comando en GDB:

conjunto de arquitectura i386: x86-64

¿Fue útil?

Solución

Tal vez usted necesita para ejecutar algo así como set architecture i386 en el indicador (gdb)? Lo que sí show architecture decir después de que se conecte al destino remoto?

Otros consejos

A GDB de 64 bits puede depurar directamente tanto a los procesos inferiores 32 y 64 bits (creo que esto se llama soporte multi-arco).

No es así con gdbserver: no es compatible con la depuración multi-arch

.

Es necesario un gdbserver que coincide con la arquitectura objetivo, y que coincide con gdb gdbserver. Construirlos desde la fuente, configurar con --target=i686.

Tal vez usted ha comprobado ya esto, pero aquí va:  - En la máquina de 64 bits, ¿tiene bibliotecas de 32 bits de la misma (libc, etc)?  - ¿Ha intentado ejecutar gdb con el "-nx" (no hay archivos de inicialización) interruptor

?

1) Se necesita una gdbserver correcto para su máquina de destino y el equipo anfitrión (la que se ajusta a la máquina de destino, en su caso.

Digamos que yo quiero para depurar un objetivo ppc de un huésped x86:

necesitaré en mi objetivo de un gdbserver ejecutable ppc.

necesitaré en mi host una GDB x86 ejecutable para PowerPC.

Después de configurarlo con esas cosas que tiene que hacer lo siguiente de su GDB anfitrión antes de conectarse al objetivo en caso de que utilice bibliotecas compartidas:

set solib-absoluta-prefix $ ELDK_PREFIX / eldk-4,2-ppc_4xx / $ CROSS_COMPILE

dir $ ELDK_PREFIX / eldk-4,2-ppc_4xx / $ CROSS_COMPILE

de lo contrario el BGF anfitrión se vuelve loca tratando de cargar bibliotecas compartidas para x86.

Creo que es necesario ejecutar gdb en su máquina host con una copia del programa de destino. Es decir. si ejecuta gdbserver myprog en su equipo de destino, es necesario copiar myprog a la máquina host y ejecutar gdb myprog.

Esta GDB manera en la máquina anfitriona tomará automáticamente la arquitectura del ejecutable. Ejecución de GDB en el host como esto también cargará los símbolos, sin la cual se podrían obtener símbolos sin resolver (signos de interrogación).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top