remote debug

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: remote debug

Beitrag von martin_frb »

mse hat geschrieben:In MSEide sende ich an gdb sigint falls gdb mit einem gdbserver verbunden und nicht im async Modus ist.
Hm, wie genau machst du das?
Unter Linux (als Lazarus / gdb host) muss ich noch testen. Aber unter Windows hatte ich damit kein Glueck.

Ich hab mal in mse gesucht, der code fuer "Interrupt" ist fast identisch: "CreateRemoteThread"/"DebugBreak" mit fallback zu "GenerateConsoleCtrlEvent"

1) Wenn ich unter Windows "CreateRemoteThread"/"DebugBreak" mit der PID von GDB selbst ausfuehre, dann crashed gdb.
2) "GenerateConsoleCtrlEvent" macht gar nix.

martin_frb
Beiträge: 586
Registriert: Mi 25. Mär 2009, 21:12
OS, Lazarus, FPC: Laz trunk / fpc latest release / Win and other
CPU-Target: mostly 32 bit

Re: remote debug

Beitrag von martin_frb »

Ok unter Windows hatte ich keinen Erfolg.

Fuer tests von Linux hab ich jetzt nicht die Zeit.
Patch haengt aber an. (trunk)

Einstellungen:
http://forum.lazarus.freepascal.org/ind ... #msg107830

Der patch erlaubt auch ohne GDB server das SigInt an GDB zu schicken (nur mal zum testen). Muss in den Optionen eingestellt werden.
Fuer GdbServer ist die Option hardcoded.

Keine Ahnung ob es klapt.

Test: Exe unter gdb server starten, Lazarus debugger starten (gdb server sollte den connect melden). Pause taste (|| in Lazarus) druecken.
Dateianhänge
gdbserver.diff
test for gdb server
(8.83 KiB) 102-mal heruntergeladen

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: remote debug

Beitrag von mse »

martin_frb hat geschrieben: Hm, wie genau machst du das?
Unter Linux (als Lazarus / gdb host) muss ich noch testen. Aber unter Windows hatte ich damit kein Glueck.
Unter Windows geht es meines Wissens nur im mode "-gdb-set target-async 1" mit "-exec-interrupt", wenn überhaupt. Ich denke Windows empfiehlt sich für Entwicklungen mit der gnu-Toolchain sowieso nur begrenzt. Vielleicht könnte man mal schauen wie Eclipse unter Windows die Sache bewerkstelligt.
Unter Linux verwende ich ebenfalls den async mode, falls möglich, sonst "kill(<gdb_process_handle>,sigint)";

Martin

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: remote debug

Beitrag von mschnell »

mse hat geschrieben: Ich denke Windows empfiehlt sich für Entwicklungen mit der gnu-Toolchain sowieso nur begrenzt.
Ich bin ja doof und habe noch nicht verstanden was Lazarus da tut (u.a. weil mir in der FPC Mailing List gesagt wurde "Lazarus verwendet immer den Kommandozeilen-gdb" <oder habe ich das da missverstanden?> ): Wenn nicht gdb, was dann ? Und wann wird gdb verwendet und wann nicht ?
mse hat geschrieben: Vielleicht könnte man mal schauen, wie Eclipse unter Windows die Sache bewerkstelligt.
Ich arbeite im Moment den ganzen Tag mit Eclipse - gezwungenermaßen unter Windows. Wenn ich die (kommerzielle) Toolchain richtig verstehe, wird da auch gdb "remote" verwendet, allerdings mit einem Interface über USB zu einem JTAG-Adapter der mit einem CPU-Chip verbunden ist. Ich will in dieser Richtung sowieso tätig werden: Windows benutze ich nur, weil es den USB-Treiber für den Adapter nicht für Linux gibt. Es soll aber möglich sein, in Eclipse die GDB-Benutzung auf TCP/IP-Remote zu konfigurieren und dabei einen Windows-Recher als Target einzustellen, auf dem ein IP-Server Programm läuft, das den Stream auf den USB-Treiber des JTAG Adapters weiterleitet. (Dei Leute beim Hersteller des Chips und der mitgelieferten Software sollen so arbeiten)

Also schaue ich mir das gleich mal an....

-Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: remote debug

Beitrag von mse »

mschnell hat geschrieben:
mse hat geschrieben: Ich denke Windows empfiehlt sich für Entwicklungen mit der gnu-Toolchain sowieso nur begrenzt.
Ich bin ja doof und habe noch nicht verstanden was Lazarus da tut (u.a. weil mir in der FPC Mailing List gesagt wurde "Lazarus verwendet immer den Kommandozeilen-gdb" <oder habe ich das da missverstanden?> ): Wenn nicht gdb, was dann ? Und wann wird gdb verwendet und wann nicht ?
gdb wird immer verwendet. FP-IDE verwendet gdb als gelinkte Library. MSEide und Lazarus das gdb-Programm via pipes.
verwendet, allerdings mit einem Interface über USB zu einem JTAG-Adapter der mit einem CPU-Chip verbunden ist. Ich will in dieser Richtung sowieso tätig werden: Windows benutze ich nur, weil es den USB-Treiber für den Adapter nicht für Linux gibt.
Welches Produkt?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: remote debug

Beitrag von mschnell »

mse hat geschrieben:gdb wird immer verwendet. FP-IDE verwendet gdb als gelinkte Library. MSEide und Lazarus das gdb-Programm via pipes.
gdb-Programm also auch in Windows sowohl in Lazarus als auch ini mseIDE. Dann verstehe ich aber Deinen Einwand "Ich denke Windows empfiehlt sich für Entwicklungen mit der gnu-Toolchain sowieso nur begrenzt." nicht.
mse hat geschrieben:Welches Produkt?
CPU: Innovasic Fido (Das ist ein 68K Prozessor mit 5 Hardware-Threads, die sich beim Debuggen als 5 separate CPUs darstellen).
Die Toolchain ist von Code Sourcery für Innovasic gebastelt worden. Der IDE-Adapter ist ein "Usb2Demon, OCDemon" vom Macraigor Systems. (Hat möglicherweise etwas mit OpenOCD zu tun, was gerade in der Mailing Liste diskutiert wird...)

In einem anderen Projekt benutze ich NetBeans" -was Eclipse ziemlich ähnlich ist - als IDE für Microchip PIC Prozessoren. Da ist aber auch das Interface zum Prozessor völlig proprietär. Keine Ahnung, ob da irgendwie gdb im Spiel ist. Immerhin ist der Compiler ein gcc.

-Michael.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: remote debug

Beitrag von mse »

mschnell hat geschrieben:Dann verstehe ich aber Deinen Einwand "Ich denke Windows empfiehlt sich für Entwicklungen mit der gnu-Toolchain sowieso nur begrenzt."
gdb ist Bestandteil der gnu toolchain wie gcc und binutils welche für Unix Umgebungen entwickelt wurden. Unter Windows werden in der Regel mingw Versionen verwendet; meiner Meinung nach nur ein Notbehelf, da nicht die volle darauf ausgelegte Umgebung zur Verfügung steht wie unter Linux.

Martin

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: remote debug

Beitrag von mschnell »

mschnell hat geschrieben:Noch einfacher wäre vielleicht ...
Mir scheint, das ist genau was "GNU Debugger through SSH (gdb)" macht.

Hier wird eine ssh-Verbindung aufgebaut (also eine bidirektionale Pipe via SSL / TCP/IP ) und dann der normale Kommandozeilen des Target-Systems gestartet und genauso ferngesteuert wie der lokale GDB.

Code: Alles auswählen

The GNU debugger through ssh allows to remote debug via a ssh connection. See docs/RemoteDebugging.txt for details. The path must contain the ssh client.Use SSH_Startup_Options for the hostname and optional username.And Remote_GDB_Exe for the filename of gdb on the remote computer.
Eigentlich sollte das einfacher sein, als den gdbserver zu verwenden.

-Michael
Zuletzt geändert von mschnell am Do 7. Feb 2013, 12:07, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: remote debug

Beitrag von mschnell »

mse hat geschrieben:meiner Meinung nach nur ein Notbehelf
Sehe ich auch so, aber Lazarus und mseIDE scheinen in Windows mingw-gdb erfolgreich einzusetzen...

-Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: remote debug

Beitrag von mse »

mschnell hat geschrieben: Sehe ich auch so, aber Lazarus und mseIDE scheinen in Windows mingw-gdb erfolgreich einzusetzen...
Mit Ach und Krach. Und ich rede nicht nur von FPC Projekten sondern auch von gcc basierten, wofür ich MSEide ebenfalls einsetze.

MiR
Beiträge: 9
Registriert: Do 7. Feb 2013, 12:13

Re: remote debug

Beitrag von MiR »

Hi, ich bin neu hier, über die freepascal-devel Liste habe ich erfahren das Ihr hier über Remote Debugging diskutiert.

Ich bin gerade dabei für Lazarus die Kommunikation mit einem GDBServer zu programmieren, im meinem Fall verbinde ich mich mit OpenOCD, mit diesem Tool kann man eine ganze Reihe von ARM basierenden Microcontrollern debuggen. Dabei wird von OpenOCD das Interface des gdbservers emuliert, es sollte also alles auch genau gleich mit dem 'normalen' gdbserver funktionieren.

Ich habe dazu eine neue Klasse basierend auf der existierenden GDBMI Debugging-Klasse erstellt die bei der Initialisierung den frisch compilierten Code auf den Microcontroller überträgt und dann mit dem Debugging beginnt. Das ganze funktioniert mittlerweile einigermassen, aber es gibt noch einige Probleme mit Breakpoints (Auf dem ARM-Microcontroller den ich benutze kann man nicht sehr viele davon definieren) aber ich würde natürlich gerne von euren Erfahrungen profitieren um den Code so optimal wie möglich zu machen.

Ich möchte also von Euch lernen was Ihr als Vorabkonfiguration für Eure Debugging-Session braucht damit ich meine Version entsprechend konfigurierbar mache damit sie möglichst vielen Anwendungsfällen gerecht wird. Und Praxistips mit welchen GDB-Versionen die Anzeige von Variablen und Objekten am besten klappt nehme ich natürlich auch gerne entgegen 8)

Michael

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: remote debug

Beitrag von mschnell »

Wenn das Interface des gdbserver emuliert wird (also ein spezieller, vermutlich schwer durchschaubarwer bidirektionaler Stream zwischen gdb und gdbserver), sollte es doch möglich sein, die bereits vorhandene Unit GDBMIServerDebugger zu verwenden. Die bindet den gdb an und stellt Optionen zur Definition des Streams zum gsbserver auf dem Target zur Verfügung. Diese Unit hat momentan allerdings einige Probleme, die wir hier gerne lösen würden. Aber wenn es nicht nötig ist, warum dann eine zusätzliche Unit ?

P.S.: ich habe hier einen "Usb2Demon, OCDemon" vom Macraigor Systems. Kann man damit OpenOCD machen ? Leider habe ich nur einen Windows-USB-Treiber dafür, keinen für Linux.

-Michael

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: remote debug

Beitrag von af0815 »

was man bei dgb über SSH einwerfen muß, ist das es unter Umständen nicht möglich ist, einen SSH Zugang ohne manuelle Authenifizierung zu haben. Beispiel ist hier QNAP, die einen modifizierten SSH Server verwenden. Den auszutauschen geht, nur hat man dann das Problem mit den Updates.

Wenn gdb über SSH, dann bitte eine Möglichkeit vorsehen Benutzer und PW optional anzugeben.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

MiR
Beiträge: 9
Registriert: Do 7. Feb 2013, 12:13

Re: remote debug

Beitrag von MiR »

GDMIServerDebugger steht in der Vererbung auf der gleichen Ebene wie meine Klasse, ein großer Teil des Codes ist ähnlich da ich entweder bei sshgdbmidebugger.pas oder gdbmiserverdebugger.pas Code 'ausgeliehen' habe. Bei dem 'ausgeliehenen' Code handelt es sich im wesentlichen um die Instanziierung von Helperklassen die benötigt werden um sich in die GUI von Lazarus einzuklinken.

Es lohnt sich daher nicht von dieser Klasse zu erben da ich für einen eigenen Menüeintrag im Lazarus sowieso ca. 140 von den 162 Zeilen Code ein weiteres mal schreiben muss damit 'mein' Debugger in Lazarus erscheint.

Die Hauptarbeit besteht eher darin einigermassen zu verstehen wie gdbmidebugger.pp cmdlinedebugger.pp und debugger.pp zusammenarbeiten damit klar wird warum und wo es gerade mal wieder nicht so wie gewünscht funktioniert :oops: Von daher ist es mir wichtig von Problemen (noch besser von Lösungen) zu hören da letztendlich das 'echte' Problem immer in einer der oben angesprochenen Basisklassen liegt, egal ob ich von gdbmiserverdebugger.pas erbe oder nicht.

Zu Deinem PS: Unter http://openocd.sourceforge.net/doc/html ... figuration habe ich Deinen Adapter nicht direkt gefunden, eventuell ist er aber mit einem der bestehenden kompatibel.

Wenn Dein Adapter auch einen gdbserver zur Verfügung stellt dann sei mein Gast, dann können wir Ihn gerne gemeinsam einbinden.
mschnell hat geschrieben:Wenn das Interface des gdbserver emuliert wird (also ein spezieller, vermutlich schwer durchschaubarwer bidirektionaler Stream zwischen gdb und gdbserver), sollte es doch möglich sein, die bereits vorhandene Unit GDBMIServerDebugger zu verwenden. Die bindet den gdb an und stellt Optionen zur Definition des Streams zum gsbserver auf dem Target zur Verfügung. Diese Unit hat momentan allerdings einige Probleme, die wir hier gerne lösen würden. Aber wenn es nicht nötig ist, warum dann eine zusätzliche Unit ?

P.S.: ich habe hier einen "Usb2Demon, OCDemon" vom Macraigor Systems. Kann man damit OpenOCD machen ? Leider habe ich nur einen Windows-USB-Treiber dafür, keinen für Linux.

-Michael

MiR
Beiträge: 9
Registriert: Do 7. Feb 2013, 12:13

Re: remote debug

Beitrag von MiR »

Die funktionalität sollte sich leicht in sshgdbmidebugger.pas einbauen lassen, in Zeile 216 (svn trunk, function TSSHGDBMIDebugger.ParseInitialization ) existiert ein auskommentierter Codeabschnitt in dem es um Authentifizierung zu gehen scheint.
Ich vermute der Author hat da angefangen zu programmieren, hat es aber nicht ganz fertiggestellt.
af0815 hat geschrieben:was man bei dgb über SSH einwerfen muß, ist das es unter Umständen nicht möglich ist, einen SSH Zugang ohne manuelle Authenifizierung zu haben. Beispiel ist hier QNAP, die einen modifizierten SSH Server verwenden. Den auszutauschen geht, nur hat man dann das Problem mit den Updates.

Wenn gdb über SSH, dann bitte eine Möglichkeit vorsehen Benutzer und PW optional anzugeben.

Antworten