![]() |
Fehler 0x0eedfade in Kernelbase.dll
Hallo, hoffentlich bin ich in diesem Unterforum richtig, denn ich bin mir selbst nicht sicher, was überhaupt der Fehler ist.
Meine Situation ist Folgende: Ich muss eine Anwendung warten (Delphi 7), die im Dateisystem regelmäßig in einem Ordner nach Änderungen schaut. Dabei werden haufenweise WinApi Calls genutzt (also die ganze Dateisystemzugriff-Palette). Jetzt haben wir ab und zu mal das Problem, dass bei einem Kunden regelmäßig eine EOutOfResources Fehlermeldung hochkommt (er nutzt Windows 7). Im Windows-Event-Log sieht man dann Folgendes: Name der fehlerhaften Anwendung: ***.exe, Version: 2.1.8.633, Zeitstempel: 0x2a425e19 Name des fehlerhaften Moduls: KERNELBASE.dll, Version: 6.1.7601.24388, Zeitstempel: 0x5c873078 Ausnahmecode: 0x0eedfade Fehleroffset: 0x0000c5af ID des fehlerhaften Prozesses: 0x1fc4 Startzeit der fehlerhaften Anwendung: 0x01d4e8856e7ac6aa Pfad der fehlerhaften Anwendung: C:\Program Files (x86)\***\***.exe Pfad des fehlerhaften Moduls: C:\Windows\syswow64\KERNELBASE.dll Berichtskennung: ac336f50-5478-11e9-81a3-028037ec0200 Der Fehlercode 0x0eedfade bedeutet ja im Grunde, dass die Aufrufende Anwendung eine Fehlermeldung in der DLL erzeugt hat (oder so ähnlich) und die DLL die nicht interpretieren kann. Allerdings kann ich leider nicht eingrenzen, welcher WinApi-Call das jetzt auslöst, da die Api-Calls für Dateisystemzugriffe ja alle an die kernel32.dll gehen. In meiner Anwendung hat auch jede einzelne Funktion und Prozedur einen großen try-catch-Block, der sämtlichen Code kapselt (historisch bedingt), allerdings greifen die auch nicht. Ich gehe zwar nicht davon aus, dass jetzt irgendjemand eine Idee hat, was genau das Problem ist (da ich auch keinen Code schicken kann/darf). Aber vielleicht hat ja jemand eine Idee, was ich noch probieren könnte, um den Fehler genauer einzugrenzen. Vielleicht dazu aber kurz den Ablauf der Prüfroutine: 1. Ein Timer feuert jede Sekunde das Prüfevent 2. Es wird geprüft, ob das zu prüfende Verzeichnis exisitert (DirectoryExists) 3. Es wird über alle Dateien und Ordner in dem Verzeichnis auf oberster Ebene iteriert (FindFirst und FindNext) 4. Es werden Dateiattribute geprüft und eventuell verändert 5. Am Ende wird aufgeräumt (FindClose) Für die Api-Calls wird nicht direkt die Delphi-Implementierung genutzt, sondern eine Unicode-fähige Implementierung von TMS (kennt vielleicht der ein oder andere). Im Hintergrund rufen die allerdings auch nur die entsprechenden Wide-Varianten der WinApi-Calls auf (hier wird der Fehler nicht liegen). Bei früheren Kunden mit dem Problem konnte der Fehler "behoben" werden, indem das Windows-Benutzerprofil gelöscht und neu angelegt wurde (natürlich hatte der Systemadmin nie was an dem alten Profil geändert :wink:). Allerdings ist das jetzt keine Lösung mehr, da unser Support den Fehler nachhaltig gelöst haben will ^^ |
AW: Fehler 0x0eedfade in Kernelbase.dll
.. unter Punkt3, werden da auch Dateien geöffnet?
Grüße Klaus |
AW: Fehler 0x0eedfade in Kernelbase.dll
Ich habe nochmal tiefer in den Code geschaut und tatsächlich wird in einer Prüfroutine unter Umständen eine Datei geöffnet, wenn eine spezielle Metadaten-Datei zusätzlich in dem zu überwachenden Verzeichnis liegt. Ich werde einmal beim Kunden nachfragen, ob so eine Datei vorhanden ist.
|
AW: Fehler 0x0eedfade in Kernelbase.dll
.. das würde dann nur irgendwann zu Problem führen, wenn sie nicht mehr geschlossen wird.
Grüße Klaus |
AW: Fehler 0x0eedfade in Kernelbase.dll
Dann wird es das vermutlich nicht sein. Die Datei wird mit in ein TIniFile geladen und später in jedem Fall wieder mit FreeAndNil freigegeben.
Kann es vielleicht sein, dass ein Virenscanner irgendwo dazwischen grätscht? Mit den Teilen hatten wir schon öfters Probleme. |
AW: Fehler 0x0eedfade in Kernelbase.dll
|
AW: Fehler 0x0eedfade in Kernelbase.dll
Wir haben das gleiche Phänomen hier mit einer D2007-Anwendung. Diese arbeitet aber sehr stark mit einem SQL-Server und produziert ab und zu eine Excel- oder PDF-Datei. Nach etwa 7 Minuten ohne Bedienung wird das Programm ohne jede Vorwarnung einfach aus dem Speicher geworfen, als würde man es mit dem Taskmanager abschießen.
MadExcept ist chancenlos, da es sich hier sehr wahrscheinlich um ein Windows-Problem handelt - der Eintrag im Eventlog zeigt das ja schon auf. Wir tippen auf ein Update seitens Windows, das nun plötzlich Stress macht. Wir konnten es nur noch nicht identifizieren. |
AW: Fehler 0x0eedfade in Kernelbase.dll
Hallo,
das ist aber nicht das gleiche Phänomen. Weil der TE immerhin eine Exception bekommt. Hier würde in der Tat MadExcept was bringen (siehe Klaus01). Ich würde MadExcept einfach mit einem neuen leeren Projekt, wo z.B. eine "Division durch 0"-Exception provoziert wird. Die Nutzung von MadExcept ist ja einfach. - in Projekt-Optionen MadExcept einstellen (ein Haken "enable MadExcept") in der DPR werden jatzt an ersteer Stelle diverse MadExcept-Unis eingebunden (haken wieder raus und die Units sind wieder weg) - beiden Compilereinstellungen alles rein was geht (Laufzeitfehler, Debug-Informationen ...) Optimierung sollte so stehen bleiben wie im Release - bei den Linkereinstellungen TD32 und externe Debugsymbole Wenn die Exe jetzt 3mal so gross ist, war alles richtig. Ein Test wäre {$IFDEF MADEXCEPT} i,j: Integer; i := StrToInt('0'); j := 10 div i; {ENDIF} Das erzeugt die Div/0-Exception. Ergebnis ist ein MadExcept-Dialog, unter Stack-Trace findet man die genaue Ziele, die die Exception verursacht, incl. Unit-/Prozedurname/Zeilennummer. Einfach mal ausprobieren! |
AW: Fehler 0x0eedfade in Kernelbase.dll
MadExcept sieht sehr vielversprechend aus, allerdings kostet das bei kommerzieller Nutzung was. Und ein "vielleicht könnte es helfen" wird dem Chef als Begründung vermutlich nicht reichen, zumal wir das nur für diesen einen Fall bräuchten, und sonst nicht.
|
AW: Fehler 0x0eedfade in Kernelbase.dll
Zitat:
Zitat:
![]() Zitat:
Zitat:
wird dir hier wohl niemand weiter helfen können. Ich würde überall da wo Handles erstellt werden einen Breakpoint setzen und beim beenden bzw. neu Erzeugung vorher prüfen ob das letzte freigegeben wurde. Ansonsten kann man nur Raten. Von einem leeren Blatt Papier kann man nun mal nicht lesen. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:29 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