AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Properties überwachen

Ein Thema von lxo · begonnen am 30. Nov 2022 · letzter Beitrag vom 30. Nov 2022
Antwort Antwort
lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#1

Properties überwachen

  Alt 30. Nov 2022, 08:11
Hallo zusammen,

Delphi-Quellcode:

  TTest = class
  private
    FGeladen: Boolean;
    FText: String;
    function GetText: String;
  public
    property Geladen: Boolean read FGeladen;
    property Text: String read GetText write FText;
    constructor Create;
  end;

{ TTest }

constructor TTest.Create;
begin
  FGeladen := False;
  FText := '';
end;

function TTest.GetText: String;
begin
  if not Self.Geladen then
  begin
    FText := '123456';
    FGeladen := True;
  end;
  Result := FText;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  lTest: TTest;
  lText: String;
begin
  lTest := TTest.Create;
  try
    lText := lTest.Text; // <-------
  finally
    lTest.Free;
  end;
end;


Wenn ich an der markierten Stelle einen Haltepunkt setze und den Ausdruck lTest.Text im Ausdrucksüberwacher anzeige oder mit der Maus drüber fahre, wird direkt schon die GetMethode ausgeführt.
Selbst wenn "Seiteneffekte und Funktionsaufrufe zulassen" abgeschaltet ist.
Das führt dazu, dass der Ausdrucksüberwacher mir Daten anzeigt die an der Stelle ja eigentlich noch gar nicht da sein sollten.
Merkwürdig ist auch, dass wenn man in TTest.GetText einen Haltepunkt setzt beim überwachen von lTest.Text er da nicht reinspringt.


Kann man das verhalten irgendwie ändern?
Oder kann mir jemand das verhalten erklären?

Würde ich lTest.GetText verwenden, verhält es sich nicht so.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.351 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Properties überwachen

  Alt 30. Nov 2022, 14:20
Erklären kann ich das nicht wirklich.
Aber es ist nun mal so, dass der Debugger auch Methoden auswerten kann.
Wenn der Debugger das richtige Ergebnis anzeigen soll, muss er durch den Getter.

Birgt natürlich Gefahren!
Im angehangenen Screenshot kann man sehen, dass durch den überwachten Ausdruck (ausgeschaltet) den Ablauf in der Routine ändert.
Schalte ich den Ausdruck ein, dann wird die Zuweisung auf LText nicht ausgeführt.

Keine Ahnung, ob man das beeinflussen kann. Man muss dann halt nicht Text sondern FText überwachen.

Frank
Miniaturansicht angehängter Grafiken
debugger.jpg  
Frank Reim
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#3

AW: Properties überwachen

  Alt 30. Nov 2022, 21:42
Zitat:
Seiteneffekte zulassen
Dafür sollte ja eigentlich die genannte Option da sein, wenn man sie aus lässt.

* nur anzeigen, wo direkt auf ein Feld/Parameter/Variable verlinkt wird
* nichts ausführen, was Funktionen (z.B. Getter) sind


OK, eine Möglichkeit "harmlose" Methoden als "statisch" zu kennzeichnen fehlt aber auch,
damit man bei einem Edit oder einer StringList dennoch den Text sehen kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (30. Nov 2022 um 22:04 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:45 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