Autor Beitrag
Kralle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: So 24.07.11 18:15 
Moin,

gibt es eine Möglichkeit den Aufruf-Stack und den Inhalt bestimmter Variablen in eine Datei zu verfrachten?

Was ich mir vorstelle ist, das neben jeder Zeile des Stack der Inhalt einer bestimmten Varibalen angezeigt wird, so das man
schnell und einfach nachvollziehen kann, wann und wo sich der Inhalt einer Variablen ändert.

Klar, ich kann es mittels F7 Schritt für Schritt machen, aber wenn es der Coumputer für mich macht, wäre das natürlich praktischer und schneller.

Gruß Heiko
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.07.11 18:21 
Die Möglichkeiten eine Änderung zu überwachen bietet Delphi 2006 noch nicht direkt.

Du kannst aber OutputDebugString benutzen um den Variableninhalt auszugeben. Zusätzlich kannst du den Stacktrace ausgeben lassen, indem du mit rechts auf einen Haltepunkt klickst (den kannst du ja in die Zeile mit OutputDebugString setzen). Dort kannst du das Häkchen bei Anhalten wegnehmen und bei Stacktrace setzen. Dann siehst du im Ereignislog diese Ausgaben.

Bei Delphi XE gibt es einen sogenannten Datenhaltepunkt. Da kannst du einfach anhalten lassen, wenn sich ein bestimmter Wert ändert.

Für diesen Beitrag haben gedankt: Kralle
Kralle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: So 24.07.11 19:10 
Hallo Jaenicke,

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Du kannst aber OutputDebugString benutzen um den Variableninhalt auszugeben.


Wie geht das?

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Zusätzlich kannst du den Stacktrace ausgeben lassen, indem du mit rechts auf einen Haltepunkt klickst (den kannst du ja in die Zeile mit OutputDebugString setzen). Dort kannst du das Häkchen bei Anhalten wegnehmen und bei Stacktrace setzen.

Okay, den Teil habe ich nachvollziehen können.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Dann siehst du im Ereignislog diese Ausgaben.

Da bin ich mal gespannt.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Bei Delphi XE gibt es einen sogenannten Datenhaltepunkt. Da kannst du einfach anhalten lassen, wenn sich ein bestimmter Wert ändert.


Das scheint lt. OH auch bei 2006 zu gehen (wenn man weiß wie):
Zitat:
Bedingung
Legt einen Bedingungsausdruck fest, der bei jedem Durchlauf ausgewertet wird. Die Programmausführung wird angehalten, wenn der Ausdruck true ergibt. Geben Sie einen Bedingungsausdruck zum Beenden der Programmausführung ein.

Sie können jeden gültigen Sprachausdruck verwenden. Alle Symbole im Ausdruck müssen jedoch vom Haltepunkt aus erreichbar sein. Funktionen sind zulässig, wenn sie einen Booleschen Wert zurückegeben


Gruß Heiko
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.07.11 20:17 
user profile iconKralle hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Du kannst aber OutputDebugString benutzen um den Variableninhalt auszugeben.


Wie geht das?
Einfach aufrufen? :gruebel:
ausblenden Delphi-Quelltext
1:
2:
OutputDebugString(PChar(MyStringVariable));
...


user profile iconKralle hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:

Bei Delphi XE gibt es einen sogenannten Datenhaltepunkt. Da kannst du einfach anhalten lassen, wenn sich ein bestimmter Wert ändert.


Das scheint lt. OH auch bei 2006 zu gehen (wenn man weiß wie):
Nein, das hat damit nichts zu tun. Bei den älteren Delphiversionen kannst du nur an bestimmten Stellen im Quelltext einen Haltepunkt setzen und dort einen Ausdruck auswerten.

Bei XE kannst du aber eine Speicherstelle unabhängig von einer Quelltextzeile überwachen und bei einer Änderung anhalten. ;-)

Für diesen Beitrag haben gedankt: Kralle
Kralle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: So 24.07.11 20:53 
Hallo,

[quote="user profile iconjaenicke"(646404)]Einfach aufrufen? :gruebel:
ausblenden Delphi-Quelltext
1:
2:
OutputDebugString(PChar(MyStringVariable));
...

Danke.

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Bei XE kannst du aber eine Speicherstelle unabhängig von einer Quelltextzeile überwachen und bei einer Änderung anhalten. ;-)

Das wäre genau ds was ich jetzt brauche, aber mehrere Hundert Euro habe ich nicht mal ebend rumliegen.

Wenn ich im Breakpoint den Halt ausschalte, dann bekomme ich keine Stack-Informationen angezeigt. siehe Bilder.

Gruß Heiko
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19313
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 24.07.11 21:49 
user profile iconKralle hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich im Breakpoint den Halt ausschalte, dann bekomme ich keine Stack-Informationen angezeigt. siehe Bilder.
Komisch, bei mir geht das problemlos in Delphi 2006, siehe Anhang. :nixweiss:

Die Debugausgabe hast du auf deinen Screenshots allerdings gar nicht drauf.
Einloggen, um Attachments anzusehen!

Für diesen Beitrag haben gedankt: Kralle
Kralle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 65

Windows XP,Win7
Delphi 6, Turbo Delphi Pro, Delphi 7 Enterprise, Delphi XE2 Lazarus
BeitragVerfasst: Mo 25.07.11 07:18 
Hallo Jaenicke,

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Komisch, bei mir geht das problemlos in Delphi 2006, siehe Anhang. :nixweiss:

Die Debugausgabe hast du auf deinen Screenshots allerdings gar nicht drauf.


Jetzt läuft es auch bei mir.
Ich hatte mir den Aufrufstack anzeigen lassen und nicht die Ereignisanzeige.

Jetzt muß ich damit nur noch den Fehler im aktuellen Projekt finden.
Als erstes werde ich die " = True" bzw. "= false" Teile entfernen.

Gruß Heiko