[IDE v0.9.22 Beta --> Variablen überwachen : wie?

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

Beitrag von bembulak »

Oh ja, ist sehr schlimm....

(Rechtschreibfehler jetzt erst gesehen).

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

Beitrag von theo »

bembulak hat geschrieben:Ich habe ein neues Testprojekt erstellt und nun geht es. Danke.
Übrigens: Was writeln so praktisch macht ist, dass man keine Typumwandlungen machen muss und alles mit Kommas getrennt hintereinander reihen kann:

z.B. writeln('Zahl1: ' , 23 , ' Zahl2: ', 24);

bembulak
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

Beitrag von bembulak »

*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?
Christian hat geschrieben:--debog-log=myfile.txt
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.

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!

Euklid
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:

Beitrag von Euklid »

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.
Hallo Bembulak!

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

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

Beitrag von theo »

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.)
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.

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.

Christian
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:

Beitrag von Christian »

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.
Wo müsste ich dies angeben, damit ich zumindest irgendwas sehe
Das ist ein Kommandozeilenparameter.
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/

bembulak
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

Beitrag von bembulak »

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)?

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Beitrag von knight »

aber eine (meiner Meinung nach) einfache und effiziente Möglichkeit zum Debuggen fehlt
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 ...

knight

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

Beitrag von theo »

Christian hat geschrieben:Lokale Variablen ist falsch können auch Globale sein aber sie müssen direkt erreichbar sein also keine Eigenschaften eines Objects o.ä.
Falsch ist das nicht, aber es stimmt, dass ich die globalen Variablen nicht erwähnt habe. Wahrscheinlich weill die fast nie vorkommen bei mir ;-)

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

Beitrag von theo »

knight hat geschrieben:Falls jemand Erfahrung mit dem Schreiben eines Debuggers hat ...
Das wäre doch mal ein Projekt für das Deutsche Lazarusforum ;-)
Aber verdammt schwierig.

Man kann über Kylix meckern soviel man will (obwohl: über Tote lästert man nicht ;-), aber beim Debugger haben sich die Borländer schon mächtig ins Zeug gelegt.
Hab mal einen "Nostalgie-Screenshot" angehängt.

Wenn man das für Lazarus auch hinkriegen könnte... wär schon schön.
Dateianhänge
Kylix Debugger
Kylix Debugger

bembulak
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

Beitrag von bembulak »

Schön langsam komm ich dahinter. :oops:
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.
Dateianhänge
pbdebugFull.png

Christian
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:

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

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

Beitrag von theo »

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... ;-)

bembulak
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

Beitrag von bembulak »

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?)

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

Beitrag von theo »

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):

Code: Alles auswählen

DebugLn(aString,#0);
Flush(Output);

Antworten