AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Auswertung Lokale Variablen unvollständig
Thema durchsuchen
Ansicht
Themen-Optionen

Auswertung Lokale Variablen unvollständig

Ein Thema von Benmik · begonnen am 19. Apr 2022 · letzter Beitrag vom 19. Apr 2022
Antwort Antwort
Seite 1 von 2  1 2      
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#1

Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 13:26
Ich habe hier folgenden Code:
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var TaskGroup: IOmniTaskGroup;
    S : TSearchRec;
    MD5 : string;
    OTC : IOmniTaskControl;
    Gef : integer;
    HashMD5: THashMD5;
begin
...
Beim Debuggen erscheinen von den 6 deklarierten Variablen nur 4, "S" und "MD5" fehlen. Bei einem Auswertungsversuch erscheint "E2003 Undeklarierter Bezeichner: 'MD5'". Mache ich die beiden Variablen global (auf Formebene), funktioniert es. Delphi CE 10.4. Was ist hier los?
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 13:55
Werden die im folgenden Code auch verwendet?

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 14:23
Die Idee kam mir auch, weswegen ich ein If MD5 = 'then exit; eingefügt habe. (Ich versuche gerade, mich in die OTL einzuarbeiten, weswegen der Code nichts Sinnvolles tut.)
Ich habe nun nochmal genau nachgeguckt und leider ist es tatsächlich so, dass dieses exit keine Konsequenzen hat. Deine Annahme ist also richtig, vielen Dank.

Wo wir gerade dabei sind: Ich verwende gern Unterprozeduren, und früher klappte da die Auswertung der Prozedur-Variablen auch in den Unterprozeduren. Das scheint weg zu sein. Kann man da etwas machen?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 14:44
Der Debugger ist bis heute leider zu blöd lokale Variablen anzuzeigen die bspw. auf dem Heap liegen weil sie in einer Closure/Anonymen Methode verwendet werden. Du kannst den Wert nur sehen wenn du entweder auf einen Haltepunkt läufst der in der Closure liegt, oder du fügst noch eine lokale Variable hinzu welche eine Kopie des Wertes erhält.
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 14:57
In früheren Versionen von Delphi klappte das aber einwandfrei.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 15:10
Kannst du eine vollstände Prozedur posten? Ich bin hauptsächlich noch mit 10.0 unterwegs, und da ist es auch so. Ich kenne es eigentlich nur so.
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
480 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 15:16
In diesem Beispiel klappt es sowohl in der lokalen Prozedur ShowValues als auch in der anonymen im TTast.Run mit D11.1 wenn man mit der Maus rüber geht oder diese im den überwachten Ausdrücken hinzufügt.
Delphi-Quellcode:
procedure TForm1.bt1Click(Sender: TObject);
var
  S1, S2: string;
  B: Byte;
  I: Integer;
  procedure ShowValues;
  var
    S: string;
  begin
    S := S1 + #32 + S2 + #32 + B.ToString + #32 + I.ToString;
    OutputDebugString(PChar(S));
  end;
begin
  S1 := 'S1';
  S2 := 'S2';
  B := 255;
  I := B *100;
  ShowValues;
  TTask.Run( procedure
  var
    S: string;
  begin
    S := S1 + #32 + S2 + #32 + B.ToString + #32 + I.ToString;
    OutputDebugString(PChar(S));
  end);
Aber mit 10.4.2 sind S1 usw. nur im TTask.Run sichtbar.
Bernd

Geändert von BerndS (19. Apr 2022 um 15:23 Uhr) Grund: 10.4.2 ergänzt
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 15:49
Ich habe mal rasch diese Prozedur rausgehauen:
Delphi-Quellcode:
procedure TForm3.Test;
var FS:TFileStream;
    Datname:string;
    Dateigröße:Cardinal;
//-------------------------------------------------------------------------------------
  function LeseDateiInStream:Boolean;
  begin
    FS := TFileStream.Create(Datname,fmOpenRead or fmShareDenyWrite);
    Dateigröße := FS.Size;
    Result := (Dateigröße > 0);
  end;
//-------------------------------------------------------------------------------------
begin
  Datname := 'C:\Temp\Test.txt';
  If not LeseDateiInStream
    then exit;
end;
... aber was passiert? Die Variablen werden in der Unterprozedur ausgewertet. Heute ist wohl nicht mein Frage-Tag. Ich hatte gestern eine Prozedur, wo es nicht klappte, wenn ich wieder auf die stoße, dann melde ich mich wieder.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 17:08
In diesem Beispiel klappt es sowohl in der lokalen Prozedur ShowValues als auch in der anonymen im TTast.Run mit D11.1 wenn man mit der Maus rüber geht oder diese im den überwachten Ausdrücken hinzufügt.
Das ist ja toll, das wäre ein weiterer Grund für mich endlich mal upzudaten 😎
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Auswertung Lokale Variablen unvollständig

  Alt 19. Apr 2022, 19:14
Hallo,
ist die Optimierung aus?
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:16 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