Ich bin derzeit mit dem Problem des Remote-Debuggens meiner Anwendung mit gdb festgefahren. Ich hätte das gerne Möglichkeit, eine Verbindung zu einem Remote-Prozess herzustellen und das visuelle Debugging von IDE zu verwenden (ich verwende Visual Studio Code).

Die Das Problem ist, dass die IDE über ihre pid an einen lokalen Prozess angehängt werden kann, was nicht wirklich nützlich ist. Wenn ich also eine lokale Portweiterleitung anfordere, kann ich die Verbindung über den lokalen Port weiterleiten, was wiederum nicht wirklich das ist, was ich möchte.

Ist es möglich, so etwas wie „PID-Weiterleitung“ durchzuführen, dh ich setze einige pid Dies ist eigentlich ein Remote-Prozess.

Kommentare

  • Sie ' Ich sage nicht, welche IDE verwendet wird (und da ich ' keine IDE verwende, würde ich wahrscheinlich nicht ' sein in der Lage, Ihnen zu helfen). Sie sollten sich jedoch gdbserver ansehen – das ' ist ein kleines Programm, das auf einem eingebetteten / eingeschränkten System ausgeführt werden kann, und Sie können eine Verbindung mit dem ' Fat Debugger ' von einer leistungsstärkeren Maschine.
  • @UncleBilly habe ich. " Ich verwende Visual Studio-Code ". Leider ist dokumentiert, dass es kein Remote-Debugging unterstützt …
  • @UncleBilly gdbserver klingt so, als wäre es das, was ich wollte. Danke.

Antwort

Als Onkel Billy Ein guter Weg, dies zu tun, ist die Verwendung der Remote-Debugging-Funktionen von GDB. Dies funktioniert, indem ein „kleiner“ Debugger auf dem Host ausgeführt wird, auf dem der zu debuggende Prozess ausgeführt wird, und eine Verbindung mit gdb vom Host hergestellt wird, auf dem Ihre Entwicklungsumgebung ausgeführt wird. Da viele IDEs (einschließlich VS-Code) das Debuggen mit gdb unterstützen, können Sie den Komfort Ihrer Entwicklungsumgebung nutzen, die auf Prozesse ausgerichtet ist, die überall ausgeführt werden, auch auf anderen Plattformen.

Auf dem Host, auf dem der Prozess ausgeführt wird, den Sie debuggen möchten, müssen Sie gdbserver installieren (häufig durch Kopieren einer statischen Binärdatei) und ausführen. Beispiel:

gdbserver --attach :9953 ${pid} 

wird an Port 9953 aufgelistet und an die angegebene Prozess-ID angehängt. Sie können verschiedene Möglichkeiten angeben, um eine Verbindung zum Server herzustellen (serielle Schnittstellen, IP-Adressen …) und entweder einen Befehl zum Debuggen ausführen oder eine Verbindung zu einem laufenden Prozess herstellen oder sogar einen „Debugging-Server“ ohne bestimmten Prozess ausführen

Auf dem Host mit Ihrer Entwicklungsumgebung stellen Sie innerhalb von gdb eine Verbindung zum Ziel her:

$ gdb ... (gdb) target remote <IP address>:9953 

Alles andere funktioniert wie gewohnt. gdb überträgt die benötigten Dateien (Bibliotheken usw.) vom Remote-Ziel. Um die Arbeit zu beschleunigen, können Sie sie jedoch auf eine lokale Kopie der Dateien verweisen. Es werden lokale Quellen verwendet.

Dies funktioniert wie erwartet, wenn die beiden Hosts identisch sind. Es kann jedoch auch verwendet werden, um mit verschiedenen Hosts zu arbeiten, z ein Windows-Programm von einem Linux-System oder typischer ein Programm, das auf einem kleinen eingebetteten System von einer größeren Entwicklungsplattform ausgeführt wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.