AGB  ·  Datenschutz  ·  Impressum  







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

Arraydaten im Debugger anzeigen

Ein Thema von ManfredU · begonnen am 24. Okt 2023 · letzter Beitrag vom 30. Sep 2024
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 16:33
That junk is from uninitialized values
Dynamische Arrays und LongStrings (String, UnicodeString, AnsiString und deren Ableitungen / nicht ShortString) sind immer initialisiert,
so wie es bei allen managed Typen der Fall ist.

Aber es kann sein, dass hier der Compilier diese Variable bereits weg optimiert hat, da dort unten diese Variable nicht mehr benuitzt wird,
und dann die DebugInfos an eine Stelle zeigen, wo kein Array mehr ist, also anderer "Datensalat" dort im Arbeitsspeicher liegt.


Im Windows-Compiler (Win32) wird so eine Variable normaler Weise erst im "end" der Methode freigegeben, aber im Android-Compiler kann es anders aussehen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
ManfredU

Registriert seit: 29. Aug 2019
26 Beiträge
 
Delphi 12 Athens
 
#2

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 16:38
In Delphi 10.3 war aber die Anzeige aber richtig, wieso dann in 11.3 nicht mehr?
Lg
Manfred
Manfred
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
392 Beiträge
 
#3

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 16:53
That junk is from uninitialized values
Dynamische Arrays und LongStrings (String, UnicodeString, AnsiString und deren Ableitungen / nicht ShortString) sind immer initialisiert,
so wie es bei allen managed Typen der Fall ist..
Thank you and i know that, also saw what Delphi IDE/Compiler can do, please have a look at this code and see why it is crashing on x32 while crashing the debugger itself on x64, on my XE8, so no guarantee on the behavior on newer version though.

Code:
procedure TForm10.FormCreate(Sender: TObject);
var
  a:array of string;
begin
  SetLength(a,4);
  a[0]:='string1';
  a[1]:='string2';
  a[2]:='string3';
  a[3]:='string4';
  SetLength(a,2);
  SetLength(a,4);
  ShowMessage(a[4]);
end;
2023-10-24 18_52_08-Untitled - Paint.png
Kas
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
392 Beiträge
 
#4

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 17:03
Ok that was a bad and unreliable example, it takes many times of running and retrying on x64 to crash the debugger and the content of the array goes junk.
Kas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 17:26
Der Index 4 muß knallen, da es ja nur 4 Items gibt, also der Größte die 3 ist, wenn man bei 0 anfängt zu zählen.

In aktuellen Delphis sind nun standardmäßig die Überlauf- und Bereichsprüfung aktiviert, für neu erstellte Projekte (leider auch die dämlichen DebugDCUs),
womit dort ein anderer Fehler zu sehen ist, bezüglich der 4:
Zitat:
Im Projekt Project27.exe ist eine Exception der Klasse ERangeError mit der Meldung 'Fehler bei Bereichsprüfung' aufgetreten.
PS:
Delphi-Quellcode:
procedure TForm25.FormCreate(Sender: TObject);
var
  a: array of string;
begin
  a := ['string0', 'string1', 'string2', 'string3'];
  SetLength(a, 2);
  SetLength(a, 4);
  ShowMessage(a[3]); // High(a) = 3
end;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (24. Okt 2023 um 17:33 Uhr)
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
392 Beiträge
 
#6

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 17:41
I am stupid sorry !

Anyway, try my example on x64, run it few times and the debugger might start to show junk everywhere or crash, like the debugger itself have problem of uninitialized stuff, also if you tried with cross platform too with x64 (LLVM), the IDE itself might will start to freeze or crash.
Kas
  Mit Zitat antworten Zitat
ManfredU

Registriert seit: 29. Aug 2019
26 Beiträge
 
Delphi 12 Athens
 
#7

AW: Arraydaten im Debugger anzeigen

  Alt 24. Okt 2023, 19:30
Mein System kommt ja nicht zum Absturz oder Fehlermeldung, da ja Lenght(array) das Richtige zurückgibt.
Mein Problem ist nur beim Debuggen, wenn ich den Curser auf ein Array setze, zeigt er mir immer 255 Elemente an (und das braucht Zeit), obwohl nur wenige mit setlength definiert sind. Bei String-Variablen oder Numerischen-Variablen funkt es perfekt. Nur nicht bei Array, und das erst sein Delphi 11.3. Auch ohne Cursor auf den Array setzen, nur mit F8 braucht er sehr lange um in die nächste Zeile weiter zu gehen.
Lg Manfred
Manfred
  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 22:30 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-2025 by Thomas Breitkreuz