![]() |
gdbserver starten, wie?
Hallo,
ich habe im Internet vom gdbserver gelesen und würde den gerne ausprobieren. Vielleicht lässt sich ja ein passender Client bauen. So sieht mein Kommandozeile aus: gdbserver 127.0.0.1:1520 Danach Strg+Alt+Entf gedrückt und im Taskmanager unter Prozesse geguckt. Kein gdbserver und auch keine gdb.exe zu sehen in der Liste der aktiven Prozesse. Muss ich zwingend ein Programm zum Debuggen mitgeben? Oder wie muss die korrekte Kommandozeile aussehen? Mit TCP/IP müsste doch dem Server egal sein, wo der Rechner steht, der den Server aufruft und wo sich letztlich das zu debuggende Programm befindet. Mein Rechner ist zwar für LAN konfiguriert, aber ich weiß auch, das die IP:127.0.0.1 den lokalen Rechner kennzeichnet. Auf dem liegt mein gdbserver und meine zu debuggende .exe Habe soeben der obigen Kommandozeile noch mein zu debuggendes Programm mit Pfad angegeben, in der Schreibweise, wie auch sonst auf der Kommandozeile des lokalen Rechners üblich, also: lw:/Verzeichnis/myprog.exe Nun ist die Console geöffnet und ich erhalte die Meldung "litening port 1520". Aber ich kann keine Debugkommandos eingeben. Was muss ich also anders machen. Kann mir jemand mal ein Aufrufbeispiel geben oder mir eine einsteigerfreundliche verständliche Dokumentation nennen oder verlinken? Oder muss ich nun von einem anderen Programm, das TCP IP beherrscht, auf den Port zugreifen, um mit dem Debugger kommunizieren zu können. Wenn ich mit einem anderen Programm per TCP/IP auf den Server zugreifen muss, bleibt dann die IP Adresse weiterhin die mit dem Aufruf von gdbserver mitgegebene, auch wenn das zugreifende Programm auf einem anderen Rechner läge. Im Netz wären ja sonst zwei IP Adressen nötig, die des Rechners mit dem gdbserver und die des entfernten Rechners, der dessen Dienste anfordert. Oder wie würde das im Netz aussehen, wenn zum Beispiel der gdbserver auf der Compilerfarm von Sourceforge läge und mein zu debuggendes Programm auf meinem PC? |
Re: gdbserver starten, wie?
Wenn du möchtest, dass der Server sowohl vom gleichen Rechner als auch von anderen Rechnern aus erreichbar ist, dann muss die IP-Adresse so aussehen:
Code:
Wenn du 127.0.0.1:1520 (=localhost:1520) verwendest, kannst du nicht von anderen Rechnern auf den Server zugreifen.
0.0.0.0:1520
|
Re: gdbserver starten, wie?
Zitat:
Folgendes gilt für Zielsystem = lokales System auf Linux, target = consoleprog, für Windows sinngemäss: Zuerst gdbserver in einem termial auf dem Zielsystem starten: Zitat:
Zitat:
Target: Zitat:
Zitat:
![]() Und so sieht es dann aus: ![]() gdb Dokumentation: ![]() gdbserver remote Protokoll: ![]() Martin |
Re: gdbserver starten, wie?
Hallo,
Danke erst mal für die schnelle Antwort. Ich habe jetzt die beiden folgenden Kommandozeilen nacheinander eingegeben. gdbserver 0.0.0.0:1520 D:/Programme/lazarus/debugger/test/examples/testcntr.exe gdb D:/Programme/lazarus/debugger/test/examples/testcntr.exe Nun vermisse ich aber im gdb-Bildschirm diese beiden Zeilen: (gdb) target remote localhost:4242 Remote debugging using localhost:4242 Wie also muss ich meine Kommandozeile ändern. Ich will ja den gdb über den Port ansteuern können. Denn, wenn ich gdb nach Serverstaert so hier aufrufe: gdb target remote localhost:4242 D:/Programme/lazarus/mingw/bin\remote: No such file or directory Wie also garantiere ich jetzt, das ich gdb wirklich über den Port bediene und nicht per gdb Console? Hab die IP gleich mal angepasst. Wie aber ist das, wenn ich von einem Client aus sowohl einen GDB auf meinem lokalen Rechner als auch einen GDB auf einem entfernten Rechner im Netzwerk aufrufen eill? Muss ich dann auch die IP Adresse 0.0.0.0 verwenden, wenn der gdbserver auf meinem lokalen Rechner ist, der GDB aber auf dem entfernten Rechner. Oder hab ich hier einen Denkfehler, weil davon auszugehen ist, das wenn ich einen gdb auf dem entfernten Rechner aufrufen will, auch den gdbserver auf demselben entfernten Rechner aufrufen muss. Ich geh mal davon aus, das auf der Sourceforge Compilerfarm irgendwo ein GDB ist. Nun ist es aber, wie ich soeben erfahre, zeitraubend, erst mal die richtige Kommandozeile zu finden für einen korrekten Aufruf. Wenn mir das gelungen ist, will ich mir einen wie auch immer aufgebauten Client bauen, der diese Kommandozeile immer so aufruft, wie ich sie mir derzeit erarbeite. Damit will ich dann sowohl mein lokales gedserver/gdb Gespann als auch ein solches Gespann auf einem Netzwerkrechner aufrufen können, zunächst mal mit der Annahme, das das zu debuggende Programm auf dem Rechner liegt, wo auch der Debugger ist. Zitat:
Danke auch für den Link zur gdb Dokumentation. Werd mir die ersst mal durcharbeiten. Aber, um Kommandos zu erlernen, indem ich sie aufrufe und deren Wirkung sehe, muss ich gebserver und gdb erst mal erfolgreich gestartet haben. Will später von einem Client im Netzwerk drauf zugreifen. Die diesbezüglich interessanten Fragen zur Compilerfarm auf Sourceforge folgen später. Jetzt will ich erst mal das Gespann gdbserver und gdb so aufrufen können, das ich den GDB über Port ansteuern kann, um später den Client bauen zu können. |
Re: gdbserver starten, wie?
Zitat:
Zitat:
Das Starten der debug-Umgebung passiert in apps/ide/main.pas, tmainfo.loadexec(). Martin |
Re: gdbserver starten, wie?
Zitat:
Zitat:
|
Re: gdbserver starten, wie?
Hallo,
Danke, wie verrückt. Habe das Kommando target remote <meine-IP>:<mein-Port> auf dem gdb Bilschirm eingegeben und habe die folgende Rückmeldung vom GDB: Remote debugging using <meine-IP>:<mein-Port> Switching to thread <Nummer> <Hex-Adresse> in ?? () (gdb) Damit hoffe ich mal, mein Ziel erreicht zu haben. Wie aber mach ich das komplett von der Kommandozeile aus? Auf dem lokalen Rechner kann ich meinen GDB ja noch aufrufen, um dort die ergänzenden Kommandos einzugeben. Aber auf dem entfernten Rechner? Ich brauche also einen gdb Aufruf von der Kommandozeile aus, wie den hier: gdb target remote localhost:4242 vorhin hatte ich da aber diese Fehlermeldung im GDB Bildschirm. D:/Programme/lazarus/mingw/bin\remote: No such file or directory Wenn ich dagegen das gleiche Kommando im GDB Bildschirm eingebe klappt es. Ich möchte aber das Gleiche von der Kommandozeile aus erreichen. Später von einem Client aus will ich ja auch auf GDB zugreifen. Ooooder kann ich im Netzwerk auch den GDB erst mal starten und dann vom Client aus über TCP/IP zB. mit einem mittels Indy Komponente idTCPClient über den Port das GDB Kommando nachreichen, das ihm sagt, von welchem Port die folgenden Kommandos kommen? Kann ich mir aber nicht so recht vorstellen. Wenn ich über den Port per TCP/IP Client auf den gdbserver zugreife, vorausgesetzt, gdb wurde vorher auch gestartet, aber gdb weiß noch nicht, von welchem Port aus die folgenden Kommandos kommen? Ich setze dabei voraus, das der gdbserver und der gdb, egal von wo angesteuert, sich immer im selben Verzeichnis auf demselben Rechner befinden. Dann könnte ja der gdbserver den gdb finden und könnte das Kommando übergeben. Ist das so auch korrekt? Dann müsste ich jetzt ne kleine Clientanwendung bauen und damit weiter experimentieren. |
Re: gdbserver starten, wie?
[quote="mse1"]gdb läuft in der Regel auf dem lokalen Rechner, lediglich gdbserver läuft auf dem entfernten target-Rechner.
[quote] Ok, aber mein Problem ist, den GDB von der Kommandozeile aus so zu steuern, das ich ihm Kommandos geben kann und die Ausgabe aud meiner Konsole erhalte. Vom Client aus GDB Kommando geben GDB gibt seine ERgebnisausgaben auf die Konsole Client liest dieese Ausgaben und bereitet sie so auf, das ich mit der erhaltenen Debuginfo wie: -Name der aktuell bearbeiteten Funktion -Name der aktuell bearbeiteten Quellcodedatei -Zeilennummer in dieser Quellcodedatei weiter arbeiten kann. So wie das eine IDE auch macht. Ich mag zwar die Kommandozeile ganz und gar nicht, aber es gibt Situationen, in denen ein Programmaufruf über eine solche gemacht werden muss. :gruebel: Ok, GDB ist also in der Regel auf dem lokalen Rechner, aber der nimmt nicht alle Kommandos von der Konsole, sondern eineige müssen vom GDB Bildschirm aus gegeben werden und die Ausgaben gehen nicht auf die Konsole, sondern auf den GDB Bildschierm. Deswegen interessiert mich der gdbserver, in der Hoffnung, das ich dann den gdb vollständig von der Konsole aus steuern kann und dessen Ausgaben wieder auf die Konsole erhalte, egal ob über TTY oder Port. Denn wenn ich mischon die Arbeit mache, einen eigenen Client zu bauen, soll der so flexibel, wie möglich sein. :wink: |
Re: gdbserver starten, wie?
Zitat:
Ich würde mal auf der Mailingliste fragen, falls die BuildService Dokumentation darüber keine Auskunft gibt. Zitat:
![]() also z.B. Zitat:
Zitat:
|
Re: gdbserver starten, wie?
Zitat:
Zitat:
|
Re: gdbserver starten, wie?
Ob man einen Webserver betreiben möchte oder den gdbserver oder einen sonstigen Server; bei TCP/IP gibt es im Prinzip drei mögliche IP-Adressen, auf denen der Server lauschen kann:
1.) localhost Wenn ein Server auf localhost (127.0.0.1) lauscht, dann kann man ihn nur über das Loopback-Interface erreichen. Loopback-Interface bedeutet, es findet kein Datenverkehr über eine Netzwerkkarte statt, sondern die Verbindung läuft intern über Winsock. Das bedeutet auch, dass der Server nicht von einem anderen Rechner erreichbar ist. Über das Loopback-Interface können je nach CPU-Power Übertragungsgeschwindigkeiten jenseits von 10 GBit/s erreicht werden. 2.) die eigene IP-Adresse Lauscht der Server auf der eigenen IP-Adresse, dann kann er über die Netzwerkarte erreicht werden. Allerdings kann ein Client, der auf dem gleichen Rechner wie der Server liegt nicht das Loopback-Interface verwenden. Das schränkt die Datenrate unnötigerweise ein. Ausserdem kann sich der Client nicht mit Localhost verbinden, sondern er muss ebenfalls die eigene IP-Adresse angeben. 3.) 0.0.0.0 Bindet ein Server an die IP-Adresse 0.0.0.0 kann er Verbindungen sowohl über die Netzwerkart(en) als auch über das interne Loopback-Interface annehmen. Ist der Rechner in mehreren lokalen Netzen zuhause; hat also mehrere IP-Adressen, dann reagiert der Server auf jede dieser IP-Adressen. |
Re: gdbserver starten, wie?
Zitat:
Zitat:
Ich hatte diese Zeile vorher ohne -ex Option und das target remote... Kommando nicht in Anführungszeichen gesetzt. Jetzt kann dich den GDB mit Portunterstützung starten, wie ich ich es haben wollte. Habe mir die Kurzdoku von dem Sourceware-Link als Textdatei in mein gdb Verzeichnis kopiert, um später da nachlesen zu können. Zitat:
Wozu aber hierzu einen eigenen Debugger schreiben, wenn es doch dafür GDB gibt. Der braucht nur seine Debuginfos an meinen Client weiterleiten, wo sie passend angezeigt wird. Werde aber in meiner mseide die Debuggereinstellungen wie im Screenshot angegeben übernehmen, falls nicht schon eingestellt, damit der GDB auch mit dieser IDE funzt. Zitat:
@sx2008: Danke auch Dir für die ausführliche Erklärung: Die Bedeutung der verschiedenen IP Adressen ist eine wichtige Information für mein Vorhaben! Jetzt bin ich aber dran: Werde nun erst mal die GDB Doku studieren und auch mit der Indy Komponente IdTCPClient rumspielen. Dann werd ich schauen, welche Kommunikationsvariante ich auswähle. :coder2: Danke Euch nochmals für die bereitwillige, zielführende Hilfe. :cheers: . |
Re: gdbserver starten, wie?
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz