Post Mortem



  • Hallo. 🙂

    OS: WinXPe

    Ich versuche mich am post mortem debugging, da ich einen recht komplizierten Fehler habe, welchem ich nicht so auf die Schliche komme.

    0xC000000D: Einem Dienst oder einer Funktion wurde ein ungültiger Parameter übergeben

    Es handelt sich dabei um einen Thread in einer Dll. Dies habe ich über einen Dump-File herausgefunden, welcher sich in einem Ordner Lokale~1 im Userverzeichnis versteckt hatte. Dieser Dump liefert mir leider Gottes nicht alle benötigten Informationen und ist nur ca. 1Mb groß.

    Nun habe ich mir gedacht, setze einen Unhandled Exception Filter und schreibe dein eigenes Dump-File. Beispiele dafür findet man ja zu Hauf.
    Leider zieht der Filter bei künstlichen Testfehlern ganz toll, aber bei dem eigentlichen Problem wird er übergangen, also gar nicht aufgerufen.

    Dann habe ich es mit Dr. Watson probiert. In dem Fehler-Meldefenster kam nach Konfiguration auch ein Debug-Button hinzu. Also flux draufgeklickt und ins konfigurierte Verzeichnis geschaut.
    Was sah ich da? Einen Textfile von Dr. Watson, welcher 2 Zeilen enthielt (Header) aber keinen Dumpfile 😡 .

    Nun frage ich mich, welcher Dienst erstellt diese temporären Dumps in Lokale~1 und wie kann ich denn so konfigurieren, dass er mehr Speicherinhalte schreibt. Und wieso zeihen sowohl mein eigener Filter, wie auch Dr. Watson nicht an? 😕

    Gruß, Sven




  • Mod

    Lies mal:
    http://blog.m-ri.de/index.php/2011/01/13/minidumps-ganz-einfach/

    Eigentlich solltest Du hier einstellen können was wo wie für Dumps erzeugt werden sollen.



  • @ Jochen

    Wie ich bereits beschrieben hatte wird dieser eigene Filter in diesem Fehlerfall leider nicht angesprochen. Auch Dr. Watson bekommt ihn nicht gegriffen. 😞
    Warum nur??????

    @ Martin

    Das sieht vielversprechend aus, vielen Dank. Das schau ich mir mal genauer an.

    [EDIT]

    Autsch, ich benötige dies aber für WINXPe SP1.
    Der Link von Martin ist ja für Vista+.

    [/EDIT]

    Gruß, Sven



  • @ Jochen

    Ich verstehe leider nicht, was Du mit der Methode PreventSetUnhandledExceptionFilter() machst und würde mich über eine kurze Erklärung sehr freuen.
    Vielleicht ist bei mir ja auch nur etwas nicht richtig eingestellt/parametrisiert?

    Gruß, Sven



  • Ich dachte, das habe ich in meinem ersten Blog-Beitrag geschrieben... und hier auch angedeutet: Ab VS2008 wird der ExceptionHandler nicht in allen Fällen aufgerufen. Damit dies aber doch wieder geschieht, muss man meine Methode aufrufen...



  • Dies habe ich auch so verstanden.
    Was Du da aber genau machst, um diese volle Funtionalität zu erreichen, verstehe ich in der Methode nicht.

    Gruß, Sven



  • Ich verhindere, dass jemand die Methode "SetUnhandledExceptionFilter" aufruft...



  • Ok, Danke.

    Was ich mich noch frage ist, wie es passieren kann, dass Dr.Watson nicht aktiv wird?
    Der Button "debug" ist da, er Dumpfile wird aber nicht erstellt.
    Die Konfiguration habe ich so gemacht, wie es im Internet empfohlen wird.

    Gruß, Sven



  • WER erstellt bzw. speichert den Dump nur, wenn das WER korrekt konfiguriert ist bzw. die Anwendung auch bei MS angemeldet ist, dass der Dump dort übertragen werden soll. Sonst wird der Dump nicht erstellt bzw. gleich wieder gelöscht...



  • Daher versuche ich ja Dr. Watson dazu zu bringen, den Dump zu erstellen.
    Aber mehr als einen zweizeiligen Textfile legt der leider nicht an.

    Wie kann es passieren, dass dem Tool eine Exception entgeht?

    @ Jochen

    Der Code von Dir führt bei mir scheinbar zu einer Rekursion und letztendlich zum Crash. 😞


Anmelden zum Antworten