![]() |
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; |
AW: Debugen nicht möglich
Liste der Anhänge anzeigen (Anzahl: 1)
Die Meldung
|
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 Min(TS.Count-1, High(VK)) do
|
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? |
AW: Debugen nicht möglich
Danke für die Hilfe. Habe aber schon alle deine Punkte abgearbeitet.
|
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.
|
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. |
AW: Debugen nicht möglich
Zitat:
|
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:
), aber das kann natürlich keine "ungültigen" Variableninhalte verarbeiten.
if Assigned(Self) then Self.Destroy;
|
AW: Debugen nicht möglich
Moin...8-)
Wenn wir schon am meckern sind... :zwinker:
Delphi-Quellcode:
...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:
TS.Free;
TS := nil; TS := TStringList.Create; Wäre nicht besser: :zwinker:
Delphi-Quellcode:
PS: Der Zusammenhang, wo die Liste dann in deinem Code letztendlich freigegeben wird, ist für uns nicht ersichtbar.
TS := TStringList.Create;
try ....Arbeit finally TS.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:38 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