Frage

habe ich versucht, Remote-Debug eine 32-Bit-Anwendung auf x86_64 Suse Linux, sondern erhalten diese "remote-Register falsch formatiert" Fehler.

Ich starte das gdbserver als auf Port 12345 bis (gdbserver localhost: 12345 my_prog)

Und das ist der Fehler:

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

Dies ist die Debug-Server-Maschine (uname -a):

Linux-Server 2.6.16.60-0.31-smp # 1 SMP Di 7. Oktober 16.16.29 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

Und das ist die Debug-Client-Maschine (uname -a):

Linux-Client 2.6.16.54-0.2.5-default # 1 Mo 21. Januar 13.29.51 UTC 2008 x86_64 x86_64 x86_64 GNU / Linux

Beide Maschinen in virtuelle Maschinen laufen zwar (VMWare). Die gdbserver Binary wird von dem Client-Rechner auf den Server kopiert.

(I remote debuggen, weil die Laufzeitumgebung auf dem Debug-Server ist produktionsähnlichen, und enthalten keine Entwicklungs-Tools, Zugriff auf den Quellcode etc.)

Alle Vorschläge sind willkommen.

UPDATE: für mich gearbeitet, indem Sie den folgenden Befehl in gdb Ausgabe:

set Architektur i386: x86-64

War es hilfreich?

Lösung

Vielleicht brauchen Sie so etwas wie set architecture i386 an der (gdb) Prompt ausführen? Was bedeutet show architecture sagen, nachdem Sie auf das entfernte Ziel anschließen?

Andere Tipps

Ein 64-Bit-GDB kann direkt beide debuggen 32 und 64-Bit-inferior Prozesse (Ich glaube, das Multi-Fußgewölbe genannt wird).

Nicht so bei gdbserver: es ist nicht Multi-Arch-Debugging unterstützt

.

Sie benötigen einen gdbserver die Zielarchitektur entspricht, und gdb die gdbserver übereinstimmt. Bauen sie von der Quelle, konfigurieren Sie mit --target=i686.

Vielleicht haben Sie überprüft, das schon, aber hier geht:  - An der Maschine 64-bit, haben Sie 32-Bit-Bibliotheken davon (libc, usw.)?  - Haben Sie versucht, GDB mit dem „nx“ läuft (keine Initialisierungsdateien) Schalter

?

1) Sie brauchen eine richtige gdbserver für Ihre Zielmaschine und Host-Maschine (die, die die Zielmaschine in Ihrem Fall paßt.

Lassen Sie sich sagen, dass ich ein ppc Ziel von einem x86-Host-debuggen möge:

Ich werde eine ppc ausführbaren gdbserver auf meinem Ziel benötigen.

Ich werde eine x86 ausführbare GDB für powerpc auf meinem Host benötigen.

Wenn Sie sich mit diesen Dingen festgelegt werden, haben Sie die folgenden von Ihrem Host gdb zu tun, bevor mit dem Ziel, falls Sie eine Verbindung geteilt Libs verwenden:

gesetzt solib-absolute-Präfix $ ELDK_PREFIX / eldk-4.2-ppc_4xx / $ CROSS_COMPILE

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

sonst der Host GDB erhalten verrückt versuchen, geteilt Libs für x86 zu laden.

Ich glaube, Sie gdb auf dem Host-Maschine mit einer Kopie des Zielprogramms ausgeführt werden müssen. D. h wenn Sie gdbserver myprog auf Ihrem Zielrechner auszuführen, müssen Sie über myprog auf dem Host-Rechner und führen gdb myprog kopieren.

Auf diese Weise GDB auf dem Host-Rechner wird automatisch die Architektur aus dem ausführbaren abholen. GDB auf dem Host wie diese laufen auch die Symbole laden, ohne die Sie nicht aufgelöste Symbole erhalten (Fragezeichen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top