Eigene Absturzmeldung?



  • Hallo,

    nachdem es einige Spezialisten gibt, die in der Registry Änderungen machen und dann Programme zum Absturz bringen würde ich gerne eine eigene Meldung zum Aufräumen aufpopen lassen wenn es dann doch mal zu einem Crash kommt.

    Wie kann man eine solche Absturzmeldung in MFC implementieren?
    Ein Try...Catch um die Hauptfunktion?

    Grüße
    TheNoName


  • Mod

    SetUnhandledExceptionFilter

    Aber Vorsicht... nicht alles kann man machen, den man kann keinen exakten Rückschluß über die Programmdaten treffen.



  • Wieso willst Du dass dein eigenes Programm abstürzt? 😕



  • Hallo,

    einige verstellen die Registry Werte, sodass ein illegaler Zugriff auf vectoren stattfinden kann. (z.B. myvector mit 5 integer und ich hole mir aus der Registry eine Info das der siebte ausgelesen werden soll). Es gibt leider viele Kombinationen in denen diese Änderungen Probleme bereiten, das ist nur ein einfaches Beispiel. Sollte der seltene Fall eintreten, würde ich gerne den Normalzustand zurückstellen.

    Ich habe mal in die OnInit den SetUnhandledExceptionFilter eingebaut und einen solchen falschen Vectorzugriff vor dem return der OnInit simuliert. Das Programm stürzt ab, aber der Handler wird nicht aufgerufen.
    Muss ich noch was beachten?

    Grüße
    SirNoName



  • sollte man nicht die Sachen die man einliest, seis aus einer Datei oder aus der Registry prüfen auf gültigkeit? So bedarf es in dem Fall auch keiner Absicherung.



  • thenoname schrieb:

    Ich habe mal in die OnInit den SetUnhandledExceptionFilter eingebaut und einen solchen falschen Vectorzugriff vor dem return der OnInit simuliert. Das Programm stürzt ab, aber der Handler wird nicht aufgerufen.

    Versuch es so

    #include <windows.h>
    #include <stdio.h>
    
    void dein_programm (void)
    {
       *(int*)0 = 123;  // Absturz provozieren
    }
    
    int main (void)
    {
       __try
       {
          dein_programm();
       }
       __except (1)
       {
          puts ("crash");  // Abfangen
       }
    }
    

    Das Dumme an falschen Registry-Werten ist, dass dein Programm falsch arbeiten wird, ohne abzustürzen.



  • Hallo,

    danke für die Antworten.
    In MFC wird der try...catch wohl in der StartKlasse mit CWinApp beim Aufrufen des Hauptdialoges eingebaut.
    Allerdings habe ich gelesen, das man nicht seinen ganzen code in ein grosses try...except schieben soll?
    Schade das SetUnhandledExceptionFilter nicht funktioniert.

    Das ein Programm falsch arbeitet ist OK, allerdings wenn das Einlesen beim Starten funktioniert und das Abarbeiten des Codes danach nicht (z.B. devision by zero oder vectorzugriffe), startet die Applikation sozusagen nie wieder. Vom Prinzip überprüfe ich die Registry Werte auf Richtigkeit, allerdings gibt es immer Schlupflöcher weil die Prüfung auf 100% Richtigkeit zuviel Formeln mit sich bringen würde.
    Es reicht mir, wenn die Registry Werte bei einem Crash zurückgesetzt werden, das spart mir sinnlose Nachvollziehbarkeit von möglichen Userfehlern.



  • Speichere deine Einstellungen/Daten besser in einer Konfigurationsdatei mit Prüfsumme (MD5 z.B.) als Integritäts-Check und verzichte auf diesen schrottigen Registry-Mist.


  • Mod



  • Martin Richter schrieb:

    http://blog.kalmbachnet.de/?postid=75

    Was für ein mieser Hack! 😃



  • Den Hack brauchst Du nur, wenn Du (fast) *alle* Exceptions abfanegn willst 😉


Anmelden zum Antworten