![]() |
EAccessViolation sporadisch beim Beenden eines Programms
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich habe für einen Kunden ein Update von einem Programm erstellt. Das funktioniert auch soweit ganz gut. Leider gibt es einen Rechner beim Kunden, der immer mal wieder sporadisch die im Anhang befindliche Fehlermeldung ausgibt, wenn das Programm beendet wird. Wie bekomme ich anhand dieser Fehlermeldung raus, wo der Fehler ist ? |
AW: EAccessViolation sporadisch beim Beenden eines Programms
Hallo,
in der JVCL gibt es eine Komponente, die man in die Fehlerbehandlung einklinken kann. (Wie das geht, weiß ich nicht mehr so genau und habe momentan auch keine Zeit, da nachzuschauen). Sie benötigt u. a. eine ausführliche MAP-Datei zum Programm und man kann dann die Fehler in eine Textdatei protokollieren. Dort findet man recht genaue Informationen zur Fehlerquelle, teilweise mit Angaben zur Unit, in der der Fehler auftrat, mit ein bisserl Glück sogar die Angabe der Quelltextzeile +/- ein paar Zeilen. Hab' mal eine Logdatei, aus einem Programm, das die Routinen nutzt, hier drangepappt. Die meisten Fehler sind Datenbankfehler, aber der Rest könnte beim Ideenfinden helfen. Es müsste auch ein Beispielprogramm bei der JVCL geben, dass Du eventuell als Anhaltspunkt nehmen könntest:
Code:
\jcl\examples\windows\debug\stacktrack\StackTrackExample.dpr
|
AW: EAccessViolation sporadisch beim Beenden eines Programms
Moin...
sporadisch ist immer eklig. Fehlertechnisch sieht es so aus daß du auf ein Objekt zugreifst was entweder nicht existiert hat oder nicht mehr existiert. Deine Freunde sind MadExcept / EurekaLog |
AW: EAccessViolation sporadisch beim Beenden eines Programms
Das "Problem" ist ja, daß freigegebener Speicher nicht immer sofort "wirklich" freigegeben, also an Windows zurückgegeben wird.
FastMM reserviert größere Speicherblöcke und gibt diese in kleineren Stückchen ans Programm weiter, um dadurch die Speichervewaltung zu beschleunigen. Es kann also sein, daß Speicher noch vorhanden ist und dieser zwischenzeitlich noch nicht von was anderem überschrieben wurde, womit es "zufällig" passieren kann, daß ein Zugriff auf etwas doch noch "funktioniert, obwohl es eigentlich nicht mehr da ist .... jenachdem ob der Speicher doch freigegeben oder überschrieben wurde. Man kann FastMM auch so einstellen, daß freigegebener Speicher zumindestens überschrieben wird, damit spätere Zugriffe erkannt werden, weil ja nun die Datenstrucktur zerstört ist und genauso kann FastMM nun erkennen, ob man in Speicher, nach dessen Freigabe, was reinschreibt (Bufferoverruns und Schreibzugriffe nach Freigabe). |
AW: EAccessViolation sporadisch beim Beenden eines Programms
Hallo zusammen,
ich habe heute Abend den Fehler gefunden. Es war die Komponente Eurekalog 7.0.1, die den Fehler verusachte. Nachdem ich Eurekalog deaktiviert hatte im Projekt war die EAccessViolation zumindest auf meinem Rechner nicht mehr vorhanden. Jetzt werde ich das noch auf dem Rechner des Kunden ausprobieren. Ich bin aber großer Zuversicht, dass es auch da funktioniert. Gruß Rolf |
AW: EAccessViolation sporadisch beim Beenden eines Programms
Pradox, ein Tool, dass Fehler aufdecken hilft, hat anscheinend in diesem Fall den Fehler selber verursacht.
|
AW: EAccessViolation sporadisch beim Beenden eines Programms
Das ist ja das schlimme. Ich werde nach dem Test beim Kunden mal die alte Eurekalog Version 6.1.4 ausporbieren, ob dann das gleiche Problem auftritt, da das Programm noch unter Delphi 2010 entwickelt wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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