Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Die Delphi-IDE (https://www.delphipraxis.net/62-die-delphi-ide/)
-   -   Wie kann ich finden wo eine Variable geändert wird? (https://www.delphipraxis.net/187635-wie-kann-ich-finden-wo-eine-variable-geaendert-wird.html)

Der schöne Günther 16. Dez 2015 18:44

Wie kann ich finden wo eine Variable geändert wird?
 
Die Frage kam bestimmt schon 10.000 mal. Aber ich schaffe es nicht die Suche passend einzugrenzen.

Ich habe eine Variable
Delphi-Quellcode:
meineZahl: Integer
. Wie kann ich im Code-Editor herausfinden wo diese Variable verändert wird (per Zuweisung oder als var-Parameter übergeben)?

Mavarik 16. Dez 2015 18:52

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1324670)
Die Frage kam bestimmt schon 10.000 mal. Aber ich schaffe es nicht die Suche passend einzugrenzen.

Ich habe eine Variable
Delphi-Quellcode:
meineZahl: Integer
. Wie kann ich im Code-Editor herausfinden wo diese Variable verändert wird (per Zuweisung oder als var-Parameter übergeben)?

Ist ein Range ausgeschlossen?
für nicht Var Parameter -> Property daraus machen
Designtime oder Runtime?

Timer-> meineZahl <> lastMeineZahl...

Bisschen mehr Futter :glaskugel:

Kralle 16. Dez 2015 19:20

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Moin,

an dem Punkt ab dem Du vermutest das die Änderung stattfindet einen Haltepunkt definieren, die Variable in die Überwachtenausdrücke übernehmen und dann wenn das Programm bei der Ausführung am Haltepunkt stoppt, mit F7 Schritt und Schritt durch den Code wandern. Als erstes kannst Du das auch mit F8 machen und wenn Du die Procedure gefunden hast in der die Veränderung stattfindet, einen Haltepunkt in die Procedure (den ersten löschen) und mit F7 weiter machen.

Gruß Heiko

Der schöne Günther 16. Dez 2015 19:24

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Danke für die Antworten. Ich möchte nicht debuggen und schauen ob sich zur Laufzeit vielleicht mal etwas ändert.

Ich möchte zur "Designzeit" die Stellen finden wo eine Variable geändert wird.

Lemmy 16. Dez 2015 19:31

AW: Wie kann ich finden wo eine Variable geändert wird?
 
suche mit "meineVariable := "

sollte hier doch ausreichen - oder denke ich zu einfach?

Der schöne Günther 16. Dez 2015 19:40

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Ja. Denn Dinge wie
Delphi-Quellcode:
verdoppeleWert(meineVariable);

[...]

procedure verdoppeleWert(var wert: Integer);
begin
   wert := wert * 2;
end;
findet man damit nicht. Von Zeigern ganz zu schweigen, aber die lassen wir mal außen vor ;-)

hoika 16. Dez 2015 19:44

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Hallo,

dann benenn die Variable um,
dann findet der Compiler die Stellen.

Zum Debuggen (jaja, willst du nicht):
Ich mache aus der Variable ein Property,
dann kannst du aber die aber nicht mit var-Parametern arbeiten.


Heiko

SMO 16. Dez 2015 19:47

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Ein
Delphi-Quellcode:
Inc(meineVariable)
hätte schon gereicht als Gegenbeispiel. ;)

Und was wäre mit
Delphi-Quellcode:
Foo(meineVariable);

procedure Foo(var wert: Integer);
begin
  wert := wert;
end;
Zählt das für dich als "Variable geändert" oder nicht? D.h. suchst du Schreibzugriffe oder tatsächliche Wertänderungen?
Egal wie die Frage ausfällt, ich kann dir da nicht weiterhelfen. Mir fällt spontan nur ein die Refactoring-Funktionen zu benutzen ("meineVariable" vom Refactoring umbenennen lassen und alle Fundstellen manuell überprüfen).

Perlsau 16. Dez 2015 19:51

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Zuweisungen finden aber nunmal nur zur Laufzeit statt. Entweder du suchst im Code nach deiner Variablen, oder suchst zur Laufzeit beim Debuggen. Wenn du sie mit dem Suchbegriff "MyVar :=" nicht findest, suchst du eben mit "var MyVar" weiter oder suchst gleich nur nach "MyVar". Ansonsten gibt es dafür keinen anderen "Trick" oder ein spezielles Feature in der IDE, zumindest nicht in meiner :-D

Uwe Raabe 16. Dez 2015 20:03

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Ist vielleicht zu einfach, aber ich hätte jetzt einfach über das Kontext-Menü Referenzen suchen (bzw. Ctrl-Shift-Enter) alle Stellen auflisten lassen. Dort sieht man Zuweisungen sehr schnell - nur bei Var-Parameten muss man halt genauer hinschauen.

Alternativ kann ich auch den Pascal Analyzer empfehlen, der für jede Variable eine Liste erstellt, aus der man die Stellen mit Zuweisung und Nutzung als Var-Parameter ablesen kann.

Der schöne Günther 16. Dez 2015 21:26

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Mein Problem war dass es heute sehr viele Stellen waren. Die alle von Hand durchzugehen macht keinen Spaß. Wenn die IDE so etwas gehabt hätte, hätte sie direkt 95% der Benutzungen herausfiltern können da es nur "Lesezugriffe" waren.

Hast du ein Bild zum Pascal Analyzer wie das im Endeffekt aussieht? Im Handbuch finde ich dazu nichts...

jaenicke 16. Dez 2015 21:50

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Das lässt sich sehr einfach machen:
Die Variable umbenennen in einen eindeutigen Namen, dann eine Funktion mit dem ursprünglichen Namen erstellen. An allen Schreibzugriffen wird es nun einen Fehler geben, dort ersetzen wir dann durch die umbenannte Variable.
Wenn dann alles kompiliert, löschen wir die zusätzliche Funktion und benennen die Variable wieder zurück.

Nun nur noch nach dem umbenannten Variablennamen suchen und man hat alle Schreibstellen.

Dann noch ein Hinweis. Das ist hier zwar nicht gesucht, aber da zwei etwas abenteuerliche Wege genannt wurden zur Laufzeit eine Änderung einer Variable mitzubekommen, möchte ich das für spätere Leser des Threads einmal noch erwähnen:
Wenn man im Debugger angehalten hat, über der Liste der Haltepunkte auf Haltepunkt hinzufügen und dabei Datenhaltepunkt auswählen. Dort dann den Namen der Variablen angeben.
Daraufhin hält das Programm automatisch an sobald die Variable einen Wert zugewiesen bekommt.

Uwe Raabe 16. Dez 2015 23:09

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1324691)
Hast du ein Bild zum Pascal Analyzer wie das im Endeffekt aussieht? Im Handbuch finde ich dazu nichts...

Steht dort unter Reports - Reference Reports - (Brief) Cross-reference Report (kompakt oder ausführlich). Wenn du dir die Legende der Abkürzungen ansiehst, sind set und var die relevanten Einträge:
Zitat:

Abbreviations: cre=Created fre=Freed imp=Implemented ref=Referenced set=Set unk=Unknown var=Varparam
Leider kommt var in den Beispielen nicht vor.

Ein Doppelclick auf den Eintrag im Report positioniert übrigens den Delphi-Editor an eben diese Stelle.

himitsu 17. Dez 2015 10:24

AW: Wie kann ich finden wo eine Variable geändert wird?
 
Schön wäre es, wenn man die Variable in ein Property umwandeln und einen Setter definieren könnte.
Haltepunkt da rein und warten. :angle:


Datenhaltepunkte -> http://www.delphipraxis.net/41047-tu...ortgeschr.html


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr.

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