2009-03-30 15 views
5

Ho provato a eseguire il debug remoto di un'applicazione a 32 bit su xux64 x64 suse, ma ottenere questo errore "registro remoto formattato male".Errore di debug remoto con GDB

comincio la gdbserver come 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) 

Questa è la macchina server di debug (uname -a):

server Linux 2.6.16.60-0.31-SMP # 1 SMP mar 7 ottobre 16:16:29 UTC 2008 x86_64 x86_64 x86_64 GNU/Linux

E questa è la macchina client di debug (uname -a):

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

Entrambe le macchine sono in esecuzione su macchine virtuali anche se (VMWare). Il file binario gdbserver viene copiato dal computer client al computer server.

(I debug remoto perché l'ambiente di runtime sul server di debug è la produzione simile, e non contiene strumenti di sviluppo, l'accesso al codice sorgente, ecc)

Eventuali suggerimenti sono i benvenuti.

UPDATE: questo ha lavorato per me emettendo il seguente comando in gdb:

insieme architettura i386: x86-64

risposta

3

Forse avete bisogno di eseguire qualcosa di simile set architecture i386 al prompt (gdb)? Cosa dice show architecture dopo essersi connessi al target remoto?

+0

Dice i386 (auto). In realtà, quando imposto arch su "i386: x86-64: intel", si avvia senza il messaggio di errore, ma quando provo ad inserire il codice, mi dà: "Impossibile accedere alla memoria all'indirizzo 0x1f7fb5000". – boffman

+0

È possibile eseguire l'intera operazione (gdbserver, gdb, app a 32 bit) sul computer client? Incontri gli stessi problemi? – sigjuice

0

Forse avete già controllato questo, ma ecco: - Sulla macchina a 64 bit, avete librerie a 32 bit (libc, ecc.)? - Hai provato a eseguire gdb con l'opzione "-nx" (nessun file di inizializzazione)?

+0

Sì, le librerie a 32 bit sono in/lib e 64-bit sono in/lib64. Ho provato gdb -nx ma non ho notato alcuna differenza? – boffman

2

Un GDB a 64 bit può eseguire direttamente il debug di entrambi i processi inferiori a 32 e 64 bit (credo sia chiamato supporto multi-arco).

Non così con gdbserver: non supporta il debugging multi-arc.

È necessario un gdbserver corrispondente all'architettura di destinazione e gdb corrispondente a gdbserver. Creali dal sorgente, configura con --target=i686.

0

1) Avete bisogno di un gdbserver adeguata per il vostro computer di destinazione e la vostra macchina host (quello che si adatta la macchina di destinazione nel tuo caso

Diciamo che voglio eseguire il debug di un bersaglio ppc da un host x86:.

ho bisogno sul mio obiettivo un gdbserver eseguibile ppc.

ho bisogno sul mio ospite un gdb eseguibile x86 per PowerPC.

Dopo si sono fissati con le cose che dovete fare quanto segue dal tuo gdb prima di collegarvi al target nel caso in cui si utilizza librerie condivise:

set solib-assoluto-prefix $ ELDK_PREFIX/eldk-4.2- ppc_4xx/$ CROSS_COMPILE

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

altrimenti il ​​gdb host impazzire cercando di caricare librerie condivise per x86.

0

Penso che sia necessario eseguire gdb sul computer host con una copia del programma di destinazione. Cioè se si esegue gdbserver myprog sul computer di destinazione, è necessario copiare su myprog sul computer host ed eseguire gdb myprog.

In questo modo gdb sulla macchina host acquisirà automaticamente l'architettura dall'eseguibile. L'esecuzione di gdb sull'host in questo modo caricherà anche i simboli, senza i quali si otterrebbero simboli non risolti (punti interrogativi).