2016-04-13 5 views
2

Für die Bedürfnisse des Projekts, schrieb ich ein einfaches Java-Socket-Programm, um eine "gefälschte" gdbserver Stub zu implementieren. Unterstützen Sie daher die Mindestanzahl von gdb-RSP-Befehlen: g, G, m, M, c und s. Für andere Befehle, antworten Sie einfach mit "$ # 00". Laut dem Handbuch von gdb würde dies gdb mitteilen, dass der "Server" keine anderen Befehle unterstützt.Gdb Remote-Debugging. Implementieren Sie einen gefälschten gdbserver-Stub. Nach mehreren Anfragen und Antwort, eine Warnung: ungültige Remote-Antwort

Ich benutze das Eclipse CDT, um mir beim Debuggen zu helfen. In den Debug-Konfigurationen habe ich die c/C++ Remote-Anwendung ausgewählt und die Debugger-Verbindung über TCP auf localhost: 10000 gesetzt, wo mein Java-Programm zum Abhören verwendet wird.

Zunächst sendet gdb Befehle wie qSupported, Hg0, qTStatus,? Und qC. Die Antwort auf alle von ihnen ist "$ # 00", um gdb mitzuteilen, dass der "Server" diese Befehle nicht unterstützt. Dann sendet gdb qAttached und qOffsets. Nachdem er zwei "$ # 00" -Antworten gesendet und ein "+" von gdb erhalten hat, sagt gdb "warning: invalid remote reply:".

Kann mir bitte jemand sagen, warum ist das passiert? Warum gdb keine Befehle sendet und "Ungültige Fernantwort:" sagt, die ich nicht weiß, welche Antwort ungültig ist, schicke ich doch einfach "$ # 00" und "+" an gdb.

+0

Nicht, dass ich Ihnen helfen kann, aber es könnte deutlicher machen, was in Ihrem Szenario passiert, wenn Sie ein Protokoll der tatsächlichen Konversation zwischen GDB und Ihrem Stub in einem ähnlichen Format wie in den Beispielen zeigen Die GDB-Dokumentation: https://sourceware.org/gdb/onlinedocs/gdb/Examples.html#Examples –

+0

Ich bin neu bei gdb und nicht sicher, wie man diese Art von Konversation erzeugt. Aber nachdem ich eine "$ S05 #" Antwort auf "$? #" Erzeugt habe, scheint gdb Arbeit zu sein. Es sendet "$ g #" Anfrage und "$ p8 #" Anfrage. Aber jetzt bekomme ich "PC register is not available" Fehler nach Antwort auf "$ p8 #" mit "$ # 00" ... – Daniel

+0

kann ich dir auch nicht ganz helfen, aber was ich aus dem letzten Satz dieser Seite verstanden habe : https://sourceware.org/gdb/onlinedocs/gdb/Overview.html#Overview, ist, dass ein ** minimaler Stub ** Befehle unterstützen muss: 'g', 'G', 'm' und 'M'. Falls nicht, wird die Kommunikation fehlschlagen. Und du tust es nicht nach deinem letzten Kommentar. –

Antwort

0

Das verwirrte mich auch, als ich das Handbuch der GDB las. Ich vermute, dass die Menge der Befehle, die Sie implementieren müssen (d. H. Diejenigen, die den Zustand Ihres Simulators beeinflussen sollten), eine Teilmenge der Befehle sind, die Ihr Server beantworten muss.

Diese excellent guide to writing an RSP server by Embecosm hat ein sehr praktisches Sequenzdiagramm in Abschnitt 3.1, die zwischen GDB und Ihrem RSP-Server die anfängliche Handshake beschreibt:

Handshake sequence diagram

Sobald Sie das Handshake haben funktionieren, ist es viel einfacher zu sehen, wie die Protokoll passt zusammen und fängt an, in den Code zu schreiben, der mit Ihrem Simulator (oder anderem Ziel) interagiert.

Verwandte Themen