Domanda

Ho provato a remoto di eseguire il debug di un'applicazione a 32 bit su x86_64 suse linux, ma ottenere questo "telecomando registro formattato male di errore".

Io avvio il gdbserver in ascolto sulla porta 12345 (gdbserver localhost:12345 my_prog)

E questo è l'errore:

$ 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)

Questo è il debug macchina server (uname -a):

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

E questo è il debug macchina client (uname -a):

Il client Linux 2.6.16.54-0.2.5-default #1 Lun Gen 21 13:29:51 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux

Entrambe le macchine sono in esecuzione di macchine virtuali, anche se (VMWare).Il gdbserver binario è copiato dal computer client al server macchina.

(Io debug remoto, perché l'ambiente di runtime sul server debug è simile a quello produttivo, e non contenere strumenti di sviluppo, l'accesso al codice sorgente, ecc.)

Eventuali suggerimenti sono i benvenuti.

AGGIORNAMENTO: questo ha funzionato per me con il seguente comando in gdb:

set di architettura i386:x86-64

È stato utile?

Soluzione

Forse avete bisogno di eseguire qualcosa di simile set architecture i386 al prompt (gdb)? Che cosa significa show architecture dire dopo la connessione a destinazione remota?

Altri suggerimenti

A GDB 64 bit può eseguire il debug direttamente entrambi i processi inferiori 32 e 64 bit (Credo questo è chiamato supporto multi-arco).

Non è così per gdbserver: esso non supporta il debug multi-arch

.

Hai bisogno di una gdbserver che corrisponde architettura target, e gdb che corrisponde gdbserver. li compilare dai sorgenti, configurare con --target=i686.

Forse avete già controllato questo, ma qui va:  - Sulla macchina a 64 bit, avete librerie a 32 bit di esso (libc, ecc)?  - Hai provato in esecuzione gdb con il "-nx" (nessun file di inizializzazione) Interruttore

?

1) È necessario un buon gdbserver per il vostro computer di destinazione e la tua macchina host (quello che si adatta la macchina di destinazione nel tuo caso.

Diciamo che si desidera eseguire il debug di un ppc destinazione da un x86 host:

Ho bisogno di più sul mio target di un file eseguibile ppc gdbserver.

Ho bisogno di più sul mio host di un sistema x86 eseguibile gdb per powerpc.

Dopo aver impostato con quelle cose che si devono effettuare le seguenti operazioni dal tuo host gdb prima di collegare il target in caso di utilizzo condiviso libs:

set solib-assoluta-prefisso $ELDK_PREFIX/eldk-4.2-ppc_4xx/$CROSS_COMPILE

$dir ELDK_PREFIX/eldk-4.2-ppc_4xx/$CROSS_COMPILE

altrimenti l'host gdb impazzire cercando di condivisione del carico libs per x86.

Credo che è necessario eseguire gdb sulla vostra macchina host con una copia del programma di destinazione. Cioè se si esegue gdbserver myprog sul computer di destinazione, è necessario copiare myprog alla macchina host ed eseguire gdb myprog.

Questo gdb modo sulla macchina host rileverà automaticamente l'architettura dalla eseguibile. Esecuzione gdb sull'host come questo sarà anche caricare i simboli, senza la quale si otterrebbe simboli non risolti (punti interrogativi).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top