2010-09-15 3 views
5

Das ist ein Schluck von einer Frage, aber im Grunde möchte ich wissen, ob ich GDB auf einer Anwendung verwenden kann kompiliert zu i686-pc-mingw auf einem Linux-Cross-over Compiler. Ich möchte das resultierende Programm auf der Zielfenster-Box mit Quellcode-Referenzen usw. debuggen.Kann GDB in einer Cross-kompilierten Win32-Anwendung auf der Zielplattform verwendet werden

Ist es möglich und wenn ja, was ich berücksichtigen muss (dh die gleiche Version von Mingw-Dateien, gleiche binutils, selbe relative Pfad zum Quellcode, etc ...)?

Eine Sache, die mich ein wenig wirft, ist die Versionsnummern von GCC und GDB scheinen nicht zu entsprechen. Wie verraten Sie, ob Versionen kompatibel sind?

Wenn diese Fragen albern klingen, dann ist es nur, weil ich GDB nicht viel benutzt habe, es ist einfach etwas, was ich anfangen möchte, also versuche ich nicht zu raten, was kaputt gegangen ist.

Antwort

6

Ja, Sie sollten GDB auf einem Linux-Host verwenden können, um eine ausführbare Datei unter i686-pc-mingw zu debuggen.

Terminologie: das i686-pc-mingw System ist Ihr Ziel, das Linux System ist Ihr Host.

  • Sie haben bereits einen linux -hosted Compiler, der i686-pc-mingw abzielt.
  • Sie müssen ein gdbserver für Ihr Ziel (mit Ihrem Cross-Compiler) erstellen.
  • Sie müssen auch eine gdb erstellen (mit nativen, nicht Cross-Compiler). Das gdb muss für --host=x86-linux und --target=i686-pc-mingw konfiguriert werden. Dies ist effektiv cross-gdb - es läuft auf Linux, debuggt aber mingw ausführbare Dateien.

Jetzt gdbserver :0 foo.exe (auf Ziel) ausführen. Das sollte eine Portnummer drucken, auf der gdbserver auf Verbindungen wartet.

Führen Sie gdb foo.exe (auf Host), und stellen Sie eine Verbindung mit dem Remote-Ziel mit target remote <windows-target-host-name>:<gdbserver-port-number>, und Sie sollten im Geschäft sein.

P.S.
GCC und GDB sind völlig separate Projekte, deren Versionen nichts miteinander zu tun haben. Sie sollten GDB mit einer relativ neuen GCC-Version erstellen können.

+0

Wow danke. Ich hatte das Gefühl, dass es ein komplexer Prozess wäre, wenn dies getan werden könnte, aber ich denke, dass ich tun kann, was Sie vorschlagen. Die beiden Maschinen verfügen über ein dediziertes 1 Gbit/s Ethernet, das sie miteinander verbindet und bereits mit Samba-Laufwerken und X-Servern kommuniziert, so dass die Kommunikation über einen anderen Server kein Problem darstellt. Vielen Dank für Ihre klare und detaillierte Antwort, insbesondere, da die Terminologie verwirrend sein kann. – SpliFF

+0

Ich habe eine Follow-up, wenn es Ihnen nichts ausmacht. Können Sie mir sagen, warum die gdb nativ sein muss? Was ist der Grund dafür? – SpliFF

+0

Danke. Ab gdb7.9 wird '--target = i686-pc-mingw32' benötigt (zusätzlich ** 32 ** am Ende). Um auch für Windows X64 zu erstellen, übergeben Sie '--target = i686-pc-mingw32, x86_64-pc-mingw' –

0

OK, es stellt sich heraus, dass dies mit "native" gdb möglich ist.

Grundsätzlich laden Sie native gdb.exe (32 oder 64 Bit, passend zu Ihrer ausführbaren Datei), und kompilieren Sie Ihre .exe "mit Debug-Symbolen" (z. B. gcc -g source.c create a.exe).

Dann kopieren Sie a.exe zu Ihrem Ziel, führen Sie es wie gdb a.exe und Sie können Haltepunkte setzen, Variablen überprüfen, etc. Wenn Sie während des Debuggens auch auf den Quellcode zugreifen möchten, können Sie Ihren Quellcode in Ihre kopieren Windows-Box, führen Sie dann gdb a.exe aus dem Verzeichnis, in dem sich Ihre Quelle befindet, so dass es ausgerichtet ist. Sie würden natürlich eine wörtliche Kopie der Quelle benötigen/wollen, aber dann haben Sie einen nativen Debugger mit vollständiger Quelle.

Wenn Sie den Debugger "von Linux" ausführen möchten (ein Vorteil ist leichter Zugang zu der aktualisierten Quelle), während Ihr Programm auf Ihrer Windows-Box läuft, dann sehen Sie die andere Antwort. Ich nehme an, es gibt auch die Möglichkeit, einen Wein-Debugger zu verwenden, um es "in Linux" auszuführen, obwohl ich das noch nie versucht habe.

Verwandte Themen