Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Debugen nicht möglich (https://www.delphipraxis.net/212537-debugen-nicht-moeglich.html)

Edelfix 24. Feb 2023 11:10

Debugen nicht möglich
 
Hallo,

ich kämpfe schon seit ein paar Tagen (mit Unterbrechungen) an einem unlösbarem Problem.

Nach dem Klick auf einen Button läuft die dazugehörige Funktion bis zur einer Zeile an der es zu einer „ACCESS_VIOLATION“ kommt.

Ab da ist mein Programm und die Die nicht mehr bedienbar. Eingefroren. Mein Programm kann dann über den Task Manager killen und die Die ist wieder bedienbar.

Aber so ist natürlich das Debugen nicht möglich. Ein Try Except um die Stelle hilft leider auch nicht.

Was kann ich noch machen?

Die Stelle:

Delphi-Quellcode:
  If K<SS.Count Then
  begin
   TS.Free;
   TS := nil;
   TS := TStringList.Create;
   //--
   TS.CommaText := '0,0,0,0,0,0'; // hier knallt es
   //--
   TS.CommaText := SS.Strings[k]; // original version
   //--
   for L:=0 to TS.Count-1 do
    If L<=High(VK) Then
     VK[L] := StrToFloatDef(TS.Strings[L],0);
  end;

Edelfix 24. Feb 2023 11:11

AW: Debugen nicht möglich
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die Meldung

himitsu 24. Feb 2023 12:08

AW: Debugen nicht möglich
 
Wo knallt es denn jetzt?
Original oder beim 0,0,0,0

Und sicher, dass es wirklich in dieser Zeile knallt?

PS:
Zitat:

Delphi-Quellcode:
  for L:=0 to TS.Count-1 do
    If L<=High(VK) Then

Delphi-Quellcode:
for L := 0 to Min(TS.Count-1, High(VK)) do

stahli 24. Feb 2023 12:11

AW: Debugen nicht möglich
 
Verwende mal testweise die Eigenschaft "Text".
Ich denke, dass es da auch ein Problem gibt.

Die Variable TS scheint nicht instanziiert zu sein (wobei das nach Deinem Quellenauszug nicht nachvollziehbar ist).

Hast Du irgendwelche Threads in Verwendung?

Wird das Projekt korrekt erzeugt? Hast Du vor jeder Zeile einen blauen Punkt?
(Es kann z.B. probleme bereiten, wenn man einen Projektordner kopiert, dann stimmt manchmal der Codeeditor nicht mehr mit dem compilierten Code überein.)

Versuche ggf. mal eine Projktbereinigung neu Neuerzeugung.

Hast Du mal einen Haltepunkt gesetzt und die Methode schrittweise debuggt?

Edelfix 24. Feb 2023 13:29

AW: Debugen nicht möglich
 
Danke für die Hilfe. Habe aber schon alle deine Punkte abgearbeitet.

Uwe Raabe 24. Feb 2023 13:38

AW: Debugen nicht möglich
 
Dann können wir ohne den vollständigen Code wohl erstmal nicht viel weiterhelfen. Die gezeigte Code-Sequenz ist sicher nicht für das Problem verantwortlich, wobei ja aber auch nicht alles zu sehen ist, was für ein Compilieren notwendig ist. Da musst du wohl noch etwas mehr liefern.

hoika 24. Feb 2023 15:16

AW: Debugen nicht möglich
 
Hallo,

Delphi-Quellcode:
  TS := TStringList.Create;

   //--

  TS.CommaText := '0,0,0,0,0,0'; // hier knallt es

Und genau das hier //-- "verschweigst Du? ;)

Was genau passiert dort.

Du könntest einen Watchpoint "TS.CommaText" setzen und dann schrittweise debuggen.

peterbelow 24. Feb 2023 15:22

AW: Debugen nicht möglich
 
Zitat:

Zitat von Edelfix (Beitrag 1519057)

Delphi-Quellcode:
  If K<SS.Count Then
  begin
   TS.Free;
   TS := nil;

Das TS.Free kann eine access violation auslösen wen TS weder Nil noch eine Referenz auf ein valides Objekt ist, d.h. irgendwelchen Müll enthält. Falls TS eine lokale Variable ist muss sie in irgend einer Weise initialisiert worden sein bevor Du Free gefahrlos darauf anwenden kannst. Der Compiler macht das nicht für dich!

himitsu 24. Feb 2023 15:53

AW: Debugen nicht möglich
 
FreeAndNil anstatt manuell Free und Nil.

Aber ja, egal was man macht, es muß vorher natürlich sichergestellt sein, dass immer entweder NIL oder eine Objektinstanz in der Variable steht.
Free hat zwar ein If-Assigned integriert (
Delphi-Quellcode:
if Assigned(Self) then Self.Destroy;
), aber das kann natürlich keine "ungültigen" Variableninhalte verarbeiten.

haentschman 25. Feb 2023 06:05

AW: Debugen nicht möglich
 
Moin...8-)

Wenn wir schon am meckern sind... :zwinker:
Delphi-Quellcode:
TS.Free;
TS := nil;
TS := TStringList.Create;
...halte ich, unabhängig der Bedenken der Vorposter wie FreeAndNil(), für keine gute Idee. Du erzeugst die Liste, füllst sie mit Inhalt und diese bleibt bis zum nächsten Aufruf (Free) im Arbeitsspeicher! :roll:

Wäre nicht besser: :zwinker:
Delphi-Quellcode:
TS := TStringList.Create;
try
....Arbeit
finally
  TS.Free;
end;
PS: Der Zusammenhang, wo die Liste dann in deinem Code letztendlich freigegeben wird, ist für uns nicht ersichtbar.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 Uhr.
Seite 1 von 2  1 2      

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