Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Fehler 0x0eedfade in Kernelbase.dll (https://www.delphipraxis.net/200607-fehler-0x0eedfade-kernelbase-dll.html)

Sumafu 7. Mai 2019 10:47

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 ^^

Klaus01 7. Mai 2019 10:57

AW: Fehler 0x0eedfade in Kernelbase.dll
 
.. unter Punkt3, werden da auch Dateien geöffnet?

Grüße
Klaus

Sumafu 7. Mai 2019 12:11

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.

Klaus01 7. Mai 2019 12:18

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

Sumafu 7. Mai 2019 12:46

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.

Klaus01 7. Mai 2019 15:36

AW: Fehler 0x0eedfade in Kernelbase.dll
 
.. hast Du die Möglichkeit MadExcept einzusetzen?

Grüße
Klaus

OlafSt 8. Mai 2019 08:49

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.

hoika 8. Mai 2019 09:11

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!

Sumafu 10. Mai 2019 14:43

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.

EWeiss 10. Mai 2019 14:55

AW: Fehler 0x0eedfade in Kernelbase.dll
 
Zitat:

denn ich bin mir selbst nicht sicher, was überhaupt der Fehler ist.
Traurig.
Zitat:

Am Ende wird aufgeräumt
Möchte ich bezweifeln denn es kommt nicht umsonst die Fehlermeldung EOutOfResources.. falls du die Meldung nicht kennst bzw. weist was es bedeutet hier nähere Informationen
Zitat:

MadExcept ist chancenlos, da es sich hier sehr wahrscheinlich um ein Windows-Problem handelt
Auch das möchte ich sehr bezweifeln denn die Fehlermeldung ist doch eindeutig.
Zitat:

MadExcept sieht sehr vielversprechend aus... Und ein "vielleicht könnte es helfen" wird dem Chef als Begründung vermutlich nicht reichen
Ohne es mal versucht zu haben und der Verwendung unserer altbewährten :glaskugel:
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 22:29 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf