Discussion:
Schreibzugriff auf Variable protokollieren
(zu alt für eine Antwort)
Stefan M. Huber
2017-05-09 11:51:05 UTC
Permalink
Grüß euch!

Eine grundsätzliche Frage: Gibt es eine Möglichkeit, ohne groß Code
umzuschreiben, in Delphi mitzubekommen, wenn eine Variable neu gesetzt wird?

Wir haben ein paar globale Variablen in einem über die Jahre gewachsenen
Programm und irgendwo wird die verbogen. Ich würd gern mitbekommen, wo.

Klar, mit einer Klasse und einem Property wär's einfach. Ist aber nicht.
Ist ein einfacher Integer.

Hat jemand Ideen?
Stefan
Hans-Peter Diettrich
2017-05-09 12:57:34 UTC
Permalink
Post by Stefan M. Huber
Grüß euch!
Eine grundsätzliche Frage: Gibt es eine Möglichkeit, ohne groß Code
umzuschreiben, in Delphi mitzubekommen, wenn eine Variable neu gesetzt wird?
Wir haben ein paar globale Variablen in einem über die Jahre gewachsenen
Programm und irgendwo wird die verbogen. Ich würd gern mitbekommen, wo.
Klar, mit einer Klasse und einem Property wär's einfach. Ist aber nicht.
Ist ein einfacher Integer.
Free Pascal kann auch globale Properties :-)

Kann Delphi nicht auch Klassen mit Default Property? [Bin schon zu lange
raus]

In einem Projekt habe ich so eine Variable durch Getter und Setter
ersetzt, die natürlich unterschiedliche Namen haben müssen. Dann meckert
der Compiler natürlich, und man muß den ganzen Quelltext umstellen,
damit er die Procedure und Function benutzt. In meinem Fall war das
allerdings ein erwünschter Nebeneffekt, da die ursprüngliche Variable
durch mehrere ersetzt werden mußte.

DoDi
Stefan M. Huber
2017-05-09 15:20:01 UTC
Permalink
Post by Hans-Peter Diettrich
Kann Delphi nicht auch Klassen mit Default Property? [Bin schon zu lange
raus]
Mit dem Suchbegriff schaut's gut aus - zumindest finde ich das ein paar
Idden. Danke für den Hinweis.

Stefan
Peter Below
2017-05-11 06:42:15 UTC
Permalink
Post by Stefan M. Huber
Grüß euch!
Eine grundsätzliche Frage: Gibt es eine Möglichkeit, ohne groß Code
umzuschreiben, in Delphi mitzubekommen, wenn eine Variable neu
gesetzt wird?
Wenn ein Programm unter dem debugger läuft kann man sog. data
breakpoints auf eine variable (besser deren Adresse) setzen. Der
Breakpoint triggert dann bei einem Schreibzugriff auf die Variable.
Natürlich ist das ein ziemlich mühsames Verfahren, wenn man keine
reproduzierbare Sequenz von Schritten hat, die das gesuchte Problem
auslösen, oder zumindest einen bestimmten Wert, der dann in der
betroffenene Variablen steht (man kann den Breakpoint auf verschiedene
Arten konfigurieren, z. B. so, dass er nur bei einem bestimmten Wert
triggert).

Außerdem muss dein Problem nicht unbedingt mit einem direkten Zugriff
auf die betroffene Variable zusammenhängen, es könnte ein memory
overwrite error sein, der nur zufällig die Variable trifft. Das kannst
Du prüfen, indem Du einfach einen Satz Dummy-Variablen vor der
betroffenen deklarierst und damit ihre Adresse änderst. Ist das Problem
noch da ist es ein direkter Zugriff, sonst eher ein memory overwrite.
Post by Stefan M. Huber
Wir haben ein paar globale Variablen in einem über die Jahre
gewachsenen Programm und irgendwo wird die verbogen. Ich würd gern
mitbekommen, wo.
Klar, mit einer Klasse und einem Property wär's einfach. Ist aber
nicht. Ist ein einfacher Integer.
Hat jemand Ideen?
Stefan
--
Peter Below
TeamB
Stefan M. Huber
2017-05-11 07:31:13 UTC
Permalink
Post by Peter Below
Post by Stefan M. Huber
Grüß euch!
Eine grundsätzliche Frage: Gibt es eine Möglichkeit, ohne groß Code
umzuschreiben, in Delphi mitzubekommen, wenn eine Variable neu gesetzt wird?
Wenn ein Programm unter dem debugger läuft kann man sog. data
breakpoints auf eine variable (besser deren Adresse) setzen. Der
Breakpoint triggert dann bei einem Schreibzugriff auf die Variable.
Super, sowas hab ich gesucht. Angeblich sollte es eine Möäglichkeit
geben, eine Variable im Watch-Window zu einem data breakpoint
hinzuzufügen. Mein XE7 hat diese Option im Kontxtmenü aber nicht.

Wenn ich mir die Adresse zB einer Booleanvariable raussuche, die er
Start > Haltepunkt hinzufügen > Datenhaltepunkt eintrage und eine
Änderung der Variable durchlaufe, bleibt der Debugger aber auch nicht
stehen.

Was mach ich denn da falsch?

Stefan
Hans-Peter Diettrich
2017-05-11 11:32:33 UTC
Permalink
Post by Peter Below
Post by Stefan M. Huber
Eine grundsätzliche Frage: Gibt es eine Möglichkeit, ohne groß Code
umzuschreiben, in Delphi mitzubekommen, wenn eine Variable neu gesetzt wird?
Wenn ein Programm unter dem debugger läuft kann man sog. data
breakpoints auf eine variable (besser deren Adresse) setzen. Der
Breakpoint triggert dann bei einem Schreibzugriff auf die Variable.
Nach meiner Erinnerung werden Variablen nur auf Änderungen untersucht,
wenn ein Breakpoint im Code erreicht wird. Das stammt aber noch aus der
Zeit vor Delphi XE, hat sich da zwischenzeitlich was dran geändert?

DoDi

Loading...