Debuggen einer Konsolenanwendung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
c-bob
Beiträge: 30
Registriert: Mo 15. Jun 2009, 11:11

Debuggen einer Konsolenanwendung

Beitrag von c-bob »

Die Frage ist mglw. zu simpel, aber wie kann man ein Konsolenprogramm unter Linux debuggen? Also mit Brechpunkten arbeiten usw.?
Beispiel: wenn ich auf eine Eingabe warte und diese auswerten will oder wenn ich das Programm in einer Schleife habe, welche auf Ereignisse wartet, dann kann ich das entsprechende Programm zwar aus der IDE heraus starten, aber es wird dadurch ja keine Konsole geöffnet, wie z.B. unter Windows.

Grüße
_c_

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Debuggen einer Konsolenanwendung

Beitrag von Hitman »

Start --> Startparamater --> Startprogramm verwenden [x] --> das Feld mit dem Befehl entsprechend anpassen --> starten :D

c-bob
Beiträge: 30
Registriert: Mo 15. Jun 2009, 11:11

Re: Debuggen einer Konsolenanwendung

Beitrag von c-bob »

Danke Hitman! Ich denke, das wird das sein, was ich gesucht habe - kann es bis jetzt aber nicht nutzen, weil immer eine Fehlermeldung kommt, die besagt, das xterm entweder fehlt oder nicht ausführbar ist. HAb dazu baer nix gefunden.

Hat jemand ne Idee?
Dateianhänge
laz1.png

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Debuggen einer Konsolenanwendung

Beitrag von Socke »

Ich hätte dazu noch eine sehr unqualifizierte Meinung:
Das Lazarus-Programm wird gar nicht durch Lazarus bzw. den Debugger gestartet sondern durch das Terminal und ist somit auch nicht debuggbar. Wenn xterm aber nicht da ist (kann auch vorkommen) brauchst du einen anderen Terminalemulator bspw. gnome-terminal unter GNOME.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

c-bob
Beiträge: 30
Registriert: Mo 15. Jun 2009, 11:11

Re: Debuggen einer Konsolenanwendung

Beitrag von c-bob »

@Socke, ja nach weiterem hinschauen ist mir das (debugproblem) auch aufgefallen. Kann es leider aber immernoch nicht testen, da ich aus der IDE heraus immernoch nicht starten kann (mit obigem Dialog). Dabei ist alles vorhanden, Wenn ich nämlich selbigen dort angemeckerten command-string in der console ausfürhe, dann klappt das :-(

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Debuggen einer Konsolenanwendung

Beitrag von Hitman »

Du wirst wahrscheinlich den gesamten Pfad zur Anwendung nehmen müssen. In der Konsole wird normalerweise eine nicht auffindbare Executable in $PATH gesucht und dann ausgeführt ... das muss nicht unbedingt auch gelten, wenn der Prozess anderweitig gestartet wird.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Debuggen einer Konsolenanwendung

Beitrag von marcov »

Normaler wise tut man das (unter Delphi und GDB beide) mit ein Debugger attach am schon hochgefahrenes Prozess.

Ich weiss nicht ob Lazarus dieser GDB moeglichkeit sichtbar macht, aber GDB hat sie bestimmt.

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: Debuggen einer Konsolenanwendung

Beitrag von mse »

c-bob hat geschrieben:Die Frage ist mglw. zu simpel, aber wie kann man ein Konsolenprogramm unter Linux debuggen?
MSEide hat sowohl unter Linux als auch unter Windows ein einfaches internes Konsolenfenster. Auch attach process ist möglich.
Nicht vertiggebracht habe ich bis heute die bequeme Verwendung eines externen Terminalprogrammes unter Linux, für allfällige Hinweise wäre ich dankbar.

Martin

c-bob
Beiträge: 30
Registriert: Mo 15. Jun 2009, 11:11

Re: Debuggen einer Konsolenanwendung

Beitrag von c-bob »

@Hitman, okay, das geht jetzt. Zumindest der Start aus Lazarus heraus.
Das Problem des Debuggens besteht aber leider weiterhin. Den Debugger kann man so nicht direkt benutzen.

@markov, kannst Du da etwas mehr dazu sagen? Vielleicht kann man das ja auch unter Lazarus realisieren. Kenne mich mit dem gdb noch nicht wirklich aus. Vielleicht kann man das ja auch über die Startparameter realisieren.

@mse, was meinst du mit "externem Terminalprogramm"? Meinst Du speziell auf MSEide bezogen?

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: Debuggen einer Konsolenanwendung

Beitrag von monta »

Du solltest xterm installieren. Es ist teilweise ohnehin sehr tief in Lazarus verankert, das xterm vorhanden und vorausgesetzt ist. Und xterm steht ja für jede Linux-Distribution zur Verfügung.
Johannes

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: Debuggen einer Konsolenanwendung

Beitrag von mse »

c-bob hat geschrieben: @mse, was meinst du mit "externem Terminalprogramm"? Meinst Du speziell auf MSEide bezogen?
Wie gesagt hat MSEide ein einfaches internes Konsolenfenster. Damit können Konsolen Programme mit voller Debuggerunterstützung gestartet werden. Dieses Konsolenfenster ist aber keine Terminalemulation und kennt keine Farbeinstellungs- und Cursorsteuerungscodes. Wie man beispielsweise xterm startet, das eigene Programm in gdb laufen lässt und dann stdout, stdin und stderr des Prüflings mit xterm verbindet habe ich noch nicht herausgefunden. Man kann xterm beauftragen ein Programm zu starten aber wie bringt man xterm dazu beispielsweise ein bestehendes, mit der Anwendung verbundenes Pseudoterminal zu bedienen?

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: Debuggen einer Konsolenanwendung

Beitrag von mschnell »

Ich kann mir nicht vorstellen dass das geht.

Ich denke die richtige Methode ist (1) Xterm starten und das zu testende Programm starten lassen und dann gdb mit dem Programm verbinden, oder (2) Xterm starten und gdb so starten lassen, dass gdb seinerseits das zu testende Programm läd.

Um bei (2) eine GUI zu verwenden, müsste GDB möglicherweise im Remote-Modus ("gdbserver") gestartet werden und die GUI läd dann den Bedienteil von GDB, der sich dann über TCP/IP mit gdbserver verbindet.

Soweit ich weiß ist es schon gelungen, mit Lazarus remote-debugging (z.B. zu einem ARM-Target) zu machen.

-Michael

c-bob
Beiträge: 30
Registriert: Mo 15. Jun 2009, 11:11

Re: Debuggen einer Konsolenanwendung

Beitrag von c-bob »

@mschnell:
Kannst Du das näher erklären? Xterm starten, dann in gdb das soeben kompilierte Programm laden und per 'run' laufen lassen? Wie komme ich dann mit den Breakpoints zurecht, die ich in der IDE gesetzt hab? Wie kann ich mir dann Variableninhalte ansehen etc.?

@monta:
xterm ist bereits installiert - der Pfad, der per default in den Startparametern angegeben ist, stimmt nur nicht, das hatte ich übersehen.

-c-

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: Debuggen einer Konsolenanwendung

Beitrag von mse »

mschnell hat geschrieben:Ich kann mir nicht vorstellen dass das geht.
Kylix konnte das.
Ich denke die richtige Methode ist (1) Xterm starten und das zu testende Programm starten lassen und dann gdb mit dem Programm verbinden,
Und wie verhindert man, dass das Programm anläuft bevor es unter gdb Kontrolle steht?
oder (2) Xterm starten und gdb so starten lassen, dass gdb seinerseits das zu testende Programm läd.
Das wäre meine Methode. Nun, wie kriegt man die Verknüpfung der stdios zwischen xterm und Programm hin?
Um bei (2) eine GUI zu verwenden, müsste GDB möglicherweise im Remote-Modus ("gdbserver") gestartet werden und die GUI läd dann den Bedienteil von GDB, der sich dann über TCP/IP mit gdbserver verbindet.
xterm läuft im "Serverraum" oder diesseits des Proxy hinter gdb?
Soweit ich weiß ist es schon gelungen, mit Lazarus remote-debugging (z.B. zu einem ARM-Target) zu machen.
Das mache ich mit MSEide auch täglich mit einem gdb-Proxy um AVR32 zu programmieren, gcc selbstverständlich. ;-)

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: Debuggen einer Konsolenanwendung

Beitrag von mschnell »

mse hat geschrieben:Und wie verhindert man, dass das Programm anläuft bevor es unter gdb Kontrolle steht?
Das habe ich mich auch gefragt. Das Problem ist aber nicht spezifisch für Commandline-Programme, sonder generell beim nachträglichen Attachen von gdb. Man muss wohl das Programm so schreiben, dass es zunächst 'mal auf eine Eingabe wartet.
mse hat geschrieben: oder (2) Xterm starten und gdb so starten lassen, dass gdb seinerseits das zu testende Programm läd.
Das wäre meine Methode. Nun, wie kriegt man die Verknüpfung der stdios zwischen xterm und Programm hin?
Ich verstehe nicht, warum das ein Problem ist. So wird das doch bei reinem Commandline-debuggen mit gdb auch gemacht. XTerm startet GDB und verbindet die stdios mit GDB, gdb startet das Programm und verbindet die stios mit dem Programm. Was sehe ich da falsch ?

mse hat geschrieben:xterm läuft im "Serverraum" oder diesseits des Proxy hinter gdb?
Verstehe ich jetzt nicht. Xterm startet gdbserver, gdbserver startet das zu testende Programm. Unabhängig davon läuft die GUI und verbindet sich über TCP/IP mit gdbserver (u.U. auf demselben Rechner). Sollte das nicht gehen ?
mse hat geschrieben: Soweit ich weiß ist es schon gelungen, mit Lazarus remote-debugging (z.B. zu einem ARM-Target) zu machen.
Das mache ich mit MSEide auch täglich mit einem gdb-Proxy um AVR32 zu programmieren, gcc selbstverständlich. ;-)
gcc mit MSEide geht das ?
warum nicht ARM, den könnte man mit FPC programmieren. MSEide kann doch bestimmt cross-compilieren und remote debuggen....

-Michael
(ich versuche gerade 'mal wieder meine Kollegen dafür zu interessieren das nogui Application Modell von MSEGUI zu verwenden, um Delphi-Programme auf Controllern ohne Grafikhardware laufen zu lassen...)

Antworten