[IDE v0.9.22 Beta --> Variablen überwachen : wie?
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
*wieder ausgrab*
Hallo mitsammen.
Tut mir leid, dass ich das wieder ausgraben muss, aber um ehrlich zu sein, komme ich da wieder nicht weiter (oder bin bisher nicht weitergekommen).
Also, wie von Christian vorgeschlagen (weil es mir am saubersten vorkommt), habe ich LCLProc in meine Uses-Klausel mitaufgenommen und kann
Debugln(string) nun auch verwenden. Das Programm bringt mir zumindest keine Fehlermeldung. Aber wo _sehe_ ich den Output?
W32-App wegklicken fällt da ja weg, das wäre nur bei Writeln(), oder?
Also, was kann ich tun, damit ich zumindest irgendeine vernünftige Rückmeldung bekomme.
Versteht mich nicht falsch. Ich könnte durchaus mit writeln() arbeiten. Bei den kleinen Sachen, die ich im Moment zusammentippe, ginge das schon, aber ich möchte mir hier nichts angewöhnen, was mir dann in der Arbeit wieder auf den Kopf fällt, weil ich vergesse ein Häckchen wegzumachen und die User sich dann über "DOS-Fenster" beklagen.
Die IDE sieht doch sehr professionell aus und scheint es auch zu sein. Somit müsste es doch möglich sein, auf einfache Weise während der Laufzeit das Verhalten des Programmes zu kontrollieren.
Danke schon mal!
Hallo mitsammen.
Tut mir leid, dass ich das wieder ausgraben muss, aber um ehrlich zu sein, komme ich da wieder nicht weiter (oder bin bisher nicht weitergekommen).
Also, wie von Christian vorgeschlagen (weil es mir am saubersten vorkommt), habe ich LCLProc in meine Uses-Klausel mitaufgenommen und kann
Debugln(string) nun auch verwenden. Das Programm bringt mir zumindest keine Fehlermeldung. Aber wo _sehe_ ich den Output?
W32-App wegklicken fällt da ja weg, das wäre nur bei Writeln(), oder?
Wo müsste ich dies angeben, damit ich zumindest irgendwas sehe, auch wenn mir der Output während der Laufzeit lieber wäre. Ich habe hier immer noch 0.9.22 beta, wo das Feature mit "einfach mal die Maus drüber halten" nicht funktioniert. Ist immernoch "variable = ???", schade eigentlich.Christian hat geschrieben:--debog-log=myfile.txt
Also, was kann ich tun, damit ich zumindest irgendeine vernünftige Rückmeldung bekomme.
Versteht mich nicht falsch. Ich könnte durchaus mit writeln() arbeiten. Bei den kleinen Sachen, die ich im Moment zusammentippe, ginge das schon, aber ich möchte mir hier nichts angewöhnen, was mir dann in der Arbeit wieder auf den Kopf fällt, weil ich vergesse ein Häckchen wegzumachen und die User sich dann über "DOS-Fenster" beklagen.
Die IDE sieht doch sehr professionell aus und scheint es auch zu sein. Somit müsste es doch möglich sein, auf einfache Weise während der Laufzeit das Verhalten des Programmes zu kontrollieren.
Danke schon mal!
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Hallo Bembulak!bembulak hat geschrieben:Ich habe hier immer noch 0.9.22 beta, wo das Feature mit "einfach mal die Maus drüber halten" nicht funktioniert. Ist immernoch "variable = ???", schade eigentlich.
Ich habe im Augenblick auch noch die 0.9.22 installiert, und das "einfach die Maus drüber halten" funktioniert. Wir können versuchen herauszufinden, warum es bei dir nicht so funktioniert, wie erwünscht.
Hast du einen Breakpoint gesetzt?
Die Ausgabe "Variable = ???" kommt bei mir nämlich, wenn ich den Breakpoint vergessen hab.
Wenn kein Breakpoint gesetzt wurde, kannst du am linken Rand des Quelltextes während der Laufzeit einen Breakpoint setzen (roter Punkt). Wenn während des Programmablaufs die Zeile des Breakpoints erreicht wird, hält der Debugger das Programm an genau dieser Stelle an. JETZT sollte das "einfach die Maus drüber halten" funktionieren und der Wert der Variablen angezeigt werden. (Aber nur für die Variablen, denen im Programmtext bis zum Breakpoint bereits ein Wert zugewiesen wurde.)
Viele Grüße, Euklid
Wenn es nur so wäre! Soviel ich weiss und sehe, kann der Laz Debugger nur lokale Variablen auswerten, also Variablen die innerhalb einer Methode mit var deklariert sind plus Übergabeparameter.Euklid hat geschrieben:JETZT sollte das "einfach die Maus drüber halten" funktionieren und der Wert der Variablen angezeigt werden. (Aber nur für die Variablen, denen im Programmtext bis zum Breakpoint bereits ein Wert zugewiesen wurde.)
Bei Objekten und Properties ist Schluss. Der GDB wurde halt nicht für Pascal geschrieben.
Das ist der wichtigste Grund, weshalb ich ab-und-zu doch noch mit Kylix entwickle, wenn's brenzlig wird. Der Kylix Debugger zeigt auch die Werte von Properties und Objekten an. Das ist schon ziemlich praktisch.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Lokale Variablen ist falsch können auch Globale sein aber sie müssen direkt erreichbar sein also keine Eigenschaften eines Objects o.ä. Ich hatte das schon mal angesprochen aber marc meinte es ist sehr schwierig zu implementieren.
In der IDE also in den Startparametern
Du kannst auch wärend der Entwicklung Win32 GUI abklicken dann öffnet sich mit dem Programm immer eine console und dort siehst du das dann.
Das ist ein Kommandozeilenparameter.Wo müsste ich dies angeben, damit ich zumindest irgendwas sehe
In der IDE also in den Startparametern
Du kannst auch wärend der Entwicklung Win32 GUI abklicken dann öffnet sich mit dem Programm immer eine console und dort siehst du das dann.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Danke erstmal für eure Antworten und eure Hilfe. Ein Stück schlauer bin ich nun doch schon (mir fehlte der Breakpoint).
Aber mal ehrlich: ist dies nicht ein Manko? Ich meine, so eine tolle IDE und eine tolle Sprache mit Top-Features, aber eine (meiner Meinung nach) einfache und effiziente Möglichkeit zum Debuggen fehlt?
Ich will ja nicht die Flinte ins Korn werfen, aber es sieht so aus, als wäre ich doch durch andere IDEs hier schon ein wenig geschädigt.
Wie sieht das im Vergleich zu Delphi aus? Ist es dort auch so "umständlich", oder ist es einfach eine Frage der Zeit, bis die Entwickler (von Lazarus) sich darum kümmern können, weil andere Dinge eine höhere Priorität besitzen (was ich natürlich voll und ganz verstehe)?
Aber mal ehrlich: ist dies nicht ein Manko? Ich meine, so eine tolle IDE und eine tolle Sprache mit Top-Features, aber eine (meiner Meinung nach) einfache und effiziente Möglichkeit zum Debuggen fehlt?
Ich will ja nicht die Flinte ins Korn werfen, aber es sieht so aus, als wäre ich doch durch andere IDEs hier schon ein wenig geschädigt.
Wie sieht das im Vergleich zu Delphi aus? Ist es dort auch so "umständlich", oder ist es einfach eine Frage der Zeit, bis die Entwickler (von Lazarus) sich darum kümmern können, weil andere Dinge eine höhere Priorität besitzen (was ich natürlich voll und ganz verstehe)?
Lazarus hat halt noch keinen eigenen Debugger (der dann auf die genannten Probleme eingehen könnte). So müssen wir derzeit mit GDB vorliebnehmen, mit allen Einschränkungen, die das mit sich bringt. Falls jemand Erfahrung mit dem Schreiben eines Debuggers hat ...aber eine (meiner Meinung nach) einfache und effiziente Möglichkeit zum Debuggen fehlt
knight
Falsch ist das nicht, aber es stimmt, dass ich die globalen Variablen nicht erwähnt habe. Wahrscheinlich weill die fast nie vorkommen bei mirChristian hat geschrieben:Lokale Variablen ist falsch können auch Globale sein aber sie müssen direkt erreichbar sein also keine Eigenschaften eines Objects o.ä.

Das wäre doch mal ein Projekt für das Deutsche Lazarusforumknight hat geschrieben:Falls jemand Erfahrung mit dem Schreiben eines Debuggers hat ...

Aber verdammt schwierig.
Man kann über Kylix meckern soviel man will (obwohl: über Tote lästert man nicht

Hab mal einen "Nostalgie-Screenshot" angehängt.
Wenn man das für Lazarus auch hinkriegen könnte... wär schon schön.
-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Schön langsam komm ich dahinter. 
Ich bin wirklich durch einen anderen Debugger verwöhnt... Oje.
Ich hab euch hier mal ein Bilder der PureBasic-IDE samt Debugger angehängt. Das erscheint mir einfach übersichtlicher, vor allem, weil ich im Variablenfenster eben alle Variablen sehe (bzw. filtern kann zwischen Lokal und Global) und so verhält es sich auch mit allen anderen von mir definierten Dingen.
Debuggerausgaben kann man ähnlich wie mit Debugln steuern, nur eben mit Debug, wenn es denn mal nötig ist.
Da muss ich mich wohl ein wenig umgewöhnen, zumal ich die Werte der Dinge auch einsehen kann, ohne einen Haltepunkt setzen zu müssen, das ist eher optional und brauche ich sehr selten.

Ich bin wirklich durch einen anderen Debugger verwöhnt... Oje.
Ich hab euch hier mal ein Bilder der PureBasic-IDE samt Debugger angehängt. Das erscheint mir einfach übersichtlicher, vor allem, weil ich im Variablenfenster eben alle Variablen sehe (bzw. filtern kann zwischen Lokal und Global) und so verhält es sich auch mit allen anderen von mir definierten Dingen.
Debuggerausgaben kann man ähnlich wie mit Debugln steuern, nur eben mit Debug, wenn es denn mal nötig ist.
Da muss ich mich wohl ein wenig umgewöhnen, zumal ich die Werte der Dinge auch einsehen kann, ohne einen Haltepunkt setzen zu müssen, das ist eher optional und brauche ich sehr selten.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Normalerweise brauch man keine Debug Ausgabe, bei den meissten basic IDEś ist es jedoch problemlos möglich sich Ausgaben in ein Fenster in der IDE umzuleiten. Find das eigentlich auch ein schönes feature das es aber so bei Delphi und Lazarus nicht gibt. Hatte genau das auch schon mal auf der Mailingliste vorgeschlagen jedoch ist es auf nicht viel Interesse gestoßen.
Für meinen teil lebe ich ganz gut mit dem Debugger z.Z. Es gibt gerade dort aber noch viel Verbesserungsbedarf da stimm ich zu.
Für meinen teil lebe ich ganz gut mit dem Debugger z.Z. Es gibt gerade dort aber noch viel Verbesserungsbedarf da stimm ich zu.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Noch ein kleiner Hinweis:
Man kann in
Ansicht -> Debuggerfenster -> Überwachte Ausdrücke
schon Objekte und deren Felder anzeigen lassen. Ist allerdings z.T. etwas knifflig.
Beispiel:
Button1^ :gibt alles aus was der Debugger über Button1 weiss
Button1^.fCaption :gibt das Caption Feld von TButton aus
Typecasten und Array Zugriff sind auch möglich.
Komplizierteres Beispiel:
TTextNode(MyControl^.fDocument^.fNode^).fTextContainer^.fText[0]
Gibt den ersten Buchstaben eines WideString aus wobei Node auf TTextNode gecastet wird.
Leider ist das schwierig zu automatisieren, deshalb macht das Lazarus auch nicht von sich aus, aber "von Hand" geht das schon.
Wollte ich nur gesagt haben...
Man kann in
Ansicht -> Debuggerfenster -> Überwachte Ausdrücke
schon Objekte und deren Felder anzeigen lassen. Ist allerdings z.T. etwas knifflig.
Beispiel:
Button1^ :gibt alles aus was der Debugger über Button1 weiss
Button1^.fCaption :gibt das Caption Feld von TButton aus
Typecasten und Array Zugriff sind auch möglich.
Komplizierteres Beispiel:
TTextNode(MyControl^.fDocument^.fNode^).fTextContainer^.fText[0]
Gibt den ersten Buchstaben eines WideString aus wobei Node auf TTextNode gecastet wird.
Leider ist das schwierig zu automatisieren, deshalb macht das Lazarus auch nicht von sich aus, aber "von Hand" geht das schon.
Wollte ich nur gesagt haben...

-
- Beiträge: 370
- Registriert: Di 6. Feb 2007, 09:29
- OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
- CPU-Target: 32bit i386, ARM
- Wohnort: Oberösterreich
Ok, danke, auch das hilft mir schon wieder viel weiter!
Und sollte man unter "Ansicht/Debuggerfenster/Debuggerausgaben" dann nicht auch sehen können, was mit "DebugLn(ausdruck)" ausgegeben wurde? Das wäre für meine gegenwärtigen Ansprüche schon vollkommen ausreichend.
Denn das mit dem Parameter und dem Schreiben der Debugausgabe in eine Logfile habe ich nun verstanden, aber das ganze im Ausgabe- oder Nachrichtenfenster zu haben, wäre schon auch sehr gut.
(Oder habe ich es gar überlesen wie es geht?)
Und sollte man unter "Ansicht/Debuggerfenster/Debuggerausgaben" dann nicht auch sehen können, was mit "DebugLn(ausdruck)" ausgegeben wurde? Das wäre für meine gegenwärtigen Ansprüche schon vollkommen ausreichend.
Denn das mit dem Parameter und dem Schreiben der Debugausgabe in eine Logfile habe ich nun verstanden, aber das ganze im Ausgabe- oder Nachrichtenfenster zu haben, wäre schon auch sehr gut.
(Oder habe ich es gar überlesen wie es geht?)
Geht schon (mind. unter Linux) aber ist ein bisschen seltsam das Ganze.
Es scheint die Ausgaben zu puffern, so dass man kürzere Texte nicht gleich angezeigt bekommt.
Hab mal ein bisschen rumprobiert.
So scheint's zu klappen (unter Linux):
Es scheint die Ausgaben zu puffern, so dass man kürzere Texte nicht gleich angezeigt bekommt.
Hab mal ein bisschen rumprobiert.
So scheint's zu klappen (unter Linux):
Code: Alles auswählen
DebugLn(aString,#0);
Flush(Output);