Entwickler-Ecke

Programmierwerkzeuge - Ausruf-Stack und Variablen


Kralle - So 24.07.11 18:15
Titel: Ausruf-Stack und Variablen
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 - 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.


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

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


Kralle - So 24.07.11 20:53

Hallo,

[quote="user profile iconjaenicke"(646404)]Einfach aufrufen? :gruebel:

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


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


Kralle - 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