

Dann am 13.04 neu gestartet, die exe lief bis gestern (20.04) also volle 7 Tage x 24h ohne Probleme durch, dann kam gestern die Av erneut. Leider habe ich versehentlich das Logfile beim Neustart überschrieben, war aber nicht so schlimm die AV kam einige Stunden später gleich nochmal.
Das erkläre ich so genau weil meine Software in 10 Threads immer wieder das Gleiche macht. Die 10 Threads importieren Daten, führen mit diesen Berechnungen durch und zeigen die Ergebnisse an, dieser Vorgang dauert pro Thread ca. 200 ms und startet dann erneut.
Mir stellt sich als erstes die Frage: Warum kommt die AV manchmal mehrmals am Tag aber wie zuletzt auch mal 7 Tage gar nicht?
Ich habe den Arbeitsteil im Thread.Execute in einen Try-Except Block gefasst:
Code: Alles auswählen
try while not(Terminated) do begin
.... [work] ....
except
on E : Exception do
log(GetLastError() , 'THREAD EXCEPTION | ClassName ' + E.ClassName + ' | Message ' + E.Message + ' | ' , ftid);
end;
>> 10|21.04.2015|09:43:17|THREAD EXCEPTION | ClassName Exception | Message Unknown Run-Time error : 210 |
>> 8|21.04.2015|09:43:17|THREAD EXCEPTION | ClassName Exception | Message Unknown Run-Time error : 210 |
Wie man hier sehen kann haben 2 Threads eine Exception ausgelöst, Thread 8 und 10.
http://www.freepascal.org/docs-html/user/userap4.html210 Object not initialized
When compiled with range checking on, a program will report this error if you call a virtual method without having called its object’s constructor.
When compiled with range checking on <<<<<< habe ich zur Fehlersuche
Auf der folgenden Seite gibts ebenfalls Hinweise zu 210: http://wiki.freepascal.org/User_Changes_Trunk
"if you call a virtual method without having called its object’s constructor."implementation changes
Exception type for object reference checking changed
Old behaviour: When object reference checking (-CR or {$OBJECTCHECKS ON}) is enabled and the unit SysUtils is used then an exception of class Exception with localizeable message Unknown runtime error 210 is created.
New behaviour: Now an exception of class EObjectCheck with localizeable message Object reference is Nil is created.
Reason: All other runtime errors in the 2xx range have appropriate exception types, so it is only natural to have an explicit type for runtime error 210 as well.
Remedy: If your code previously checked an exception for the message Unknown runtime error 210 you should now check for the exception class EObjectCheck.
Wie gesagt meine Threads tun immer dasselbe, mir ist nicht klar welche virtuelle Methode ich da plötzlich nutzen soll, ohne den Constructor genutzt zu haben?
Ich übergebe mir beim jedem Logeintrag GetLastError() und logge diesen ebenfalls mit wenn er <> 0. Dabei fiel mir auf das immer wieder "GetLastError() : 5 | Zugriff verweigert." geloggt wird.
Meine Fragen:
1. Wie kann ich mehr Infos zur EXCEPTION bekommen, mit "Unknown Run-Time error : 210" komm ich nicht wirklich weiter.
2. GetLastError() loggt mir dauernd "GetLastError() : 5 | Zugriff verweigert" und das auch obwohl und während die Software einwandfrei läuft, wie komme ich da an mehr Infos?
Wie immer riesen DANKE an Euch!