Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Valueänderung eines Properties mit dem Debugger erkennen (https://www.delphipraxis.net/207330-valueaenderung-eines-properties-mit-dem-debugger-erkennen.html)

charly52 14. Mär 2021 11:30

Valueänderung eines Properties mit dem Debugger erkennen
 
Hi all,
kann man die Änderung eines Property-Wertes mit dem Debugger erkennen.
mit "Daten Haltepunkt" schaffe ich es nicht.
Habe aber auch Info gefunden, daß es mit Properties einfach nicht geht.

Und was ich auch nicht gefunden habe, ist die Info, wie man eine Änderung (schreiben in eine Variable)
erkennen kann. Geht das überhaupt?

Das Tutorial zum Debuggen hier im Forum hat mir auch nicht weiter geholfen.


Jetzt mein eigentliches Problem:

im Form gibt es eine Komponente

- cbProjDir: THistoryCombo;
- THistoryCombo = class(TComboBox)

Wenn ich mir in der Watch-Liste
frmTransMain.cbProjDir.ItemIndex anschaue sehe ich "-1" bis ich etwas zuweise. Ok.

parallel dazu schaue ich mir
frmTransMain.cbProjDir.FItemIndex an und sehe immer "-1" ??? Auch nach der Zuweisung

Im FormCreate passiert nix, immer" -1" als ItemIndex. Ist ok. In FormShow wird einIndex von 0 gesetzt.
Wenn später im laufenden Programm an einer anderen Stelle gehlten wird, ist der Index wieder -1 und ich kann die Stelle wo das passiert nicht finden.


Danke schon mal

Charly

himitsu 14. Mär 2021 11:55

AW: Valueänderung eines Properties mit dem Debugger erkennen
 
Das "Normale" sind Adresshaltepunkte
und Soeinen könnte man z.B. in den Setter des gewünschten Property setzen.
Das hilft natürlich nur, wenn es programmseitig über VCL zugewiesen wird. Direkt über SendMessage kommt es dort nicht vorbei.
Oder man schaut, ob es ein OnChange-Ereignis gibt. Das kommt zwar erst nach dem Ändern, aber im Stacktrace dürfte noch der Auslöser stehen. (bei SendMessage klappt das leider nicht so gut, mit dem Stacktrace)

Oder hier wäre auch ein Datenhaltepunkt denkbar, aber der muß auf eine interne Variable gehen, also eine Adresse im Arbeitsspeicher, nicht auf das Property.
http://docwiki.embarcadero.com/RADSt...atenhaltepunkt
Nur hast du hier keine (eigene/verfügbare) Variable, da das sich das irgendwo in der Windows-Komponente versteckt.

charly52 15. Mär 2021 09:47

AW: Valueänderung eines Properties mit dem Debugger erkennen
 
Aus http://docwiki.embarcadero.com/RADSt...atenhaltepunkt
Zitat:

Legen Sie im Feld Länge die Länge des Datenoperanden fest, der den Haltepunkt bilden soll. Beachten Sie, dass für die folgenden Situationen eine Warnung angezeigt wird:

Die Länge des Datenhaltepunkts sollte keine geraden Byte-Grenzen überlappen. (Für einen Datenhaltepunkt mit einer Länge von 1 Byte bestehen keine Ausrichtungsprobleme, aber Datenhaltepunkte mit 2 und 4 Byte könnten mehr oder weniger Adressen abdecken, als Sie beabsichtigen.)
Das mit den Datenhaltepunkten mit 2 oder 4 Byte verstehe ich nicht???




Und wie kann ich einen Datenhaltepunkt dazu bekommen, daß er immer bei einem schreibenden Zugriff auslöst?

charly52 15. Mär 2021 09:53

AW: Valueänderung eines Properties mit dem Debugger erkennen
 
Zitat:

Legen Sie im Feld Länge die Länge des Datenoperanden fest, der den Haltepunkt bilden soll. Beachten Sie, dass für die folgenden Situationen eine Warnung angezeigt wird:

Die Länge des Datenhaltepunkts sollte keine geraden Byte-Grenzen überlappen. (Für einen Datenhaltepunkt mit einer Länge von 1 Byte bestehen keine Ausrichtungsprobleme, aber Datenhaltepunkte mit 2 und 4 Byte könnten mehr oder weniger Adressen abdecken, als Sie beabsichtigen.)
Das mit den Datenhaltepunkten mit 2 oder 4 Byte verstehe ich nicht???




Und wie kann ich einen Datenhaltepunkt dazu bekommen, daß er immer bei einem schreibenden Zugriff auslöst?
Dazu habe ich gerade was gefunden.
http://docwiki.embarcadero.com/RADSt...inzuf%C3%BCgen

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ückgeben. Falls bei Datenhaltepunkten keine Bedingung festgelegt ist, wird der Haltepunkt wirksam, wenn die Daten innerhalb des Bereichs, der im Feld Länge angegeben ist, geändert werden.

charly52 15. Mär 2021 09:59

AW: Valueänderung eines Properties mit dem Debugger erkennen
 
Und nochmal zurück zu meinem Problem

Zitat:

im Form gibt es eine Komponente

- cbProjDir: THistoryCombo;
- THistoryCombo = class(TComboBox)

Wenn ich mir in der Watch-Liste
frmTransMain.cbProjDir.ItemIndex anschaue sehe ich "-1" bis ich etwas zuweise. Ok.

parallel dazu schaue ich mir
frmTransMain.cbProjDir.FItemIndex an und sehe immer "-1" ??? Auch nach der Zuweisung
Die Variable FItemIndex müsste man doch mit überwachen können wenn die Adresse bekannt ist?
und wieso ändert sich deren angezeigter Wert nicht?

himitsu 15. Mär 2021 10:12

AW: Valueänderung eines Properties mit dem Debugger erkennen
 
Wenn du "was" zuweißt und wie?
Und gibt es auch etwas in den Items?

noisy_master 15. Mär 2021 16:24

AW: Valueänderung eines Properties mit dem Debugger erkennen
 
Hi,

so ein Problem habe ich auch mal gehabt, und es gab hier eine super Antwort aus dem Forum... Guckst du hier :https://www.delphipraxis.net/1064376-post16.html

Danke nochmals an die vielen einfallsreichen und guten Geister hier in der Runde!

Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz