Debuggen von Konsolenprogramme

Für Fragen rund um die Ide und zum Debugger
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

Debuggen von Konsolenprogramme

Beitrag von mschnell »

Hi,

Ich meine, so etwas wäre hier schonmal diskutiert worden, ich finde die Lösung aber nicht in den alten Foren-Beiträgen.

Wie kann ich de "Writeln()" Output eines Konsolen-Programmes sehen, wenn ich den Lazarus-Debugger verwende (Ich erinnere mich, das bei einer uralten Lazarus-Version dieses Fenster immer geöffnet wurde, die neue tut das nicht mehr.)

Ich kann den Output im "Debugger"-Fenster sehen, aber nicht realtime, sondern erst erst, wenn das Programm angehalten hat und gemischt mit diversen Outputs des gdb. Das ist gar nicht praktisch :(.

-Michael

Benutzeravatar
theo
Beiträge: 10937
Registriert: Mo 11. Sep 2006, 19:01

Re: Debuggen von Konsolenprogramme

Beitrag von theo »

Ja, Konsolenprogramme mit Lazarus debuggen ist anerkannter Käse.
Alles was mir dazu einfällt, ist ein Flush zu machen, wenn du das Debuggerausgaben Fenster updaten willst.

Writeln('test');
Flush(StdOut); //Aus dem Gedächtnis

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 von Konsolenprogramme

Beitrag von mse »

mschnell hat geschrieben:Das ist gar nicht praktisch
Nimm MSEide? ;-)
Meines Wissens gibt es da zwei Probleme. Unter Windows werden pipes beim writeln von FPC nicht geflushed, wie Theo schrieb braucht's dann ein flush(output) um die Resultate in einem mittels pipes verbundenen Fenster zu sehen oder beim filehandler muss eine procedure umgesetzt werden. Die Details sind mir im Moment nicht mehr präsent, für entsprechende Änderungsvorschläge meinerseits hatte das FPC-Team kein Gehör.
Unter Windows kann aber das System-Konsolen-Fenster verwendet werden, dort wird output bei jedem writeln geflushed. Unter Linux kann ein Pseudo-Terminal zur Trennung von gdb und target output und zum forcieren des flush verwendet werden (MSEide macht das mit dem 'Targetconsole'-Fenster). Für Lazarus wurde ein entsprechender Patch noch nicht appliziert AFAIK.

Benutzeravatar
theo
Beiträge: 10937
Registriert: Mo 11. Sep 2006, 19:01

Re: Debuggen von Konsolenprogramme

Beitrag von theo »

mse hat geschrieben: Nimm MSEide? ;-)
Ich sag's ja wirklich nicht gerne, aber in diesem - und nur in diesem - Falle hat Herr Schreiber unter Umständen, eventuell, möglicherweise afaik, afair, imho, damit vielleicht sogar recht. :lol:

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 von Konsolenprogramme

Beitrag von mschnell »

mse hat geschrieben:Unter Linux kann ein Pseudo-Terminal zur Trennung von gdb und target output und zum forcieren des flush verwendet werden (MSEide macht das mit dem 'Targetconsole'-Fenster). Für Lazarus wurde ein entsprechender Patch noch nicht appliziert AFAIK.
Wenn Du mir aus Deiner mse-ide - Erfahrung sagen kannst, wie das gehen könnte, versuche ich mich vielleicht daran...

-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: Debuggen von Konsolenprogramme

Beitrag von mschnell »

theo hat geschrieben:Ja, Konsolenprogramme mit Lazarus debuggen ist anerkannter Käse.
Offensichtlich !!!
Erinnere ich mich denn wirklich falsch, dass eine ganz alte Lazarus-Version bei jedem Debuggen ein Konsolen-Fenster aufgemacht hat und man mit writeln() darauf schreiben konnte ?

Gruß,
-Michael

Benutzeravatar
theo
Beiträge: 10937
Registriert: Mo 11. Sep 2006, 19:01

Re: Debuggen von Konsolenprogramme

Beitrag von theo »

mschnell hat geschrieben: Erinnere ich mich denn wirklich falsch, dass eine ganz alte Lazarus-Version bei jedem Debuggen ein Konsolen-Fenster aufgemacht hat und man mit writeln() darauf schreiben konnte ?
Das weiss ich nicht. Ich kann mir aber nicht vorstellen, dass das jemals im Zusammenspiel mit GDB zufälligerweise funktioniert hat, und jetzt plötzlich nicht mehr und keiner weiss warum.
Früher war alles besser, jedenfalls in der Erinnerung. ;-)

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 von Konsolenprogramme

Beitrag von mse »

mschnell hat geschrieben:Wenn Du mir aus Deiner mse-ide - Erfahrung sagen kannst, wie das gehen könnte, versuche ich mich vielleicht daran...
Zuerst habe ich den Spott und danach auch noch die Arbeit? ;-)

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 von Konsolenprogramme

Beitrag von mschnell »

mse hat geschrieben:Zuerst habe ich den Spott
Aber nicht von mir !
mse hat geschrieben:und danach auch noch die Arbeit? ;-)
Das Los der Wissenden :) :) :) Die beste Lösung jedes einzelnen Teil-Aspekts sollte bei Bedarf verfügbar sein :) :) :)
-Michael

Benutzeravatar
theo
Beiträge: 10937
Registriert: Mo 11. Sep 2006, 19:01

Re: Debuggen von Konsolenprogramme

Beitrag von theo »

mschnell hat geschrieben:
mse hat geschrieben:Zuerst habe ich den Spott
Aber nicht von mir !
Von mir auch nicht. Ich habe mse ja sogar recht gegeben (Schwersten Herzens versteht sich) ;-)

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 von Konsolenprogramme

Beitrag von marcov »

mse hat geschrieben:
mschnell hat geschrieben:Das ist gar nicht praktisch
Meines Wissens gibt es da zwei Probleme. Unter Windows werden pipes beim writeln von FPC nicht geflushed, wie Theo schrieb braucht's dann ein flush(output) um die Resultate in einem mittels pipes verbundenen Fenster zu sehen oder beim filehandler muss eine procedure umgesetzt werden.
Alle Text I/O mit writeln ist immer gepuffert. Unter TP, FPC und Delphi, mit mindestens 128 byte puffer. Aber ein settextbuffer(f,0); kontte auch helfen?

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Debuggen von Konsolenprogramme

Beitrag von shokwave »

mschnell hat geschrieben:Offensichtlich !!!
Erinnere ich mich denn wirklich falsch, dass eine ganz alte Lazarus-Version bei jedem Debuggen ein Konsolen-Fenster aufgemacht hat und man mit writeln() darauf schreiben konnte ?
Das einzige was mir dazu einfällt, wäre der Haken bei Win32-GUI-Anwendung in den Compilereinstellungen. Wenn Haken raus, dann Konsole an. Muß man nur genug Breakpoints setzten und von Breakpoint zu Breakpoint mit F9 hüpfen. :roll:
mfg Ingo

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 von Konsolenprogramme

Beitrag von mschnell »

marcov hat geschrieben:Alle Text I/O mit writeln ist immer gepuffert. Unter TP, FPC und Delphi, mit mindestens 128 byte puffer. Aber ein settextbuffer(f,0); kontte auch helfen?
Das wäre zum Debuggen sicher vorteilhaft.

Darüber hinaus wäre es aber sehr wünschenswert, wenn man optional ein Fenster aktivieren könnte, in das der writeln() Output getrennt vom gdb Output geschrieben wird. MSEIDE macht das wunderschön :) (Ich würde das für Linux brauchen).

Wie könnte man das machen ?

-Michael

shokwave
Beiträge: 475
Registriert: Do 15. Nov 2007, 16:58
OS, Lazarus, FPC: Win11/Ubuntu Budgie (L 3.0 FPC 3.2.2)
CPU-Target: i386, x64
Wohnort: Gera

Re: Debuggen von Konsolenprogramme

Beitrag von shokwave »

Unter Start/Startparameter gibts noch "Startprogramm verwenden". Wenn Haken rein, dann Xterm an.
Hoffe das hilft dir weiter.
mfg Ingo

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 von Konsolenprogramme

Beitrag von mse »

marcov hat geschrieben: Alle Text I/O mit writeln ist immer gepuffert. Unter TP, FPC und Delphi, mit mindestens 128 byte puffer. Aber ein settextbuffer(f,0); kontte auch helfen?
Liefert Do_Isdevice() true, wird bei writeln geflushed, sonst nicht. Unter Linux kann durch Verwendung eines Pseudoterminals geflushter Betrieb erreicht werden, unter Windows geht das nur mittels des System-Konsolen-Fensters, nicht hinter einer Pipe. Früher (FPC <= 1.8?) lieferte Do_Isdevice() for stdio immer true. Mein Vorschlag war, unter Windows auch bei Pipes true zu liefern. Nun kommt mir auch wieder in den Sinn, wie das flushen im Programm ein- und ausgeschaltet werden kann:

Code: Alles auswählen

textrec(output).flushfunc:= textrec(output).inoutfunc; //flush ein
 textrec(output).flushfunc:= nil;                       //flush aus

Antworten