programmabsturz abfangen?



  • kleine frage:

    ich habe schon ab und zu programme gesehen, die den absturz abfangen. sodass anstatt e.g. einer speicherverletzungs-message was anderes kommt....

    zum beispiel VirtualDub, wenn das abstürzt zeigt es sogar so ne art mini-debugger...

    oder programme, die die SDL nutzen (und voll initialisieren), zeigen bei einer speicherverletzung keine message an, sondern es wird "SDL parachute deployed" nach stdout.txt geschrieben.....

    wie funktioniert sowas?

    ich denke mal mit nem speziellen debugging-treiber ist sowas locker machbar, aber ich glaube nicht dass diese programme sowas benutzen. es muss einfacher sein, irgendwas mit der WinAPI halt...

    noch schärfer: der firefox öffnet beim absturz automatisch ein bug-submit form, welches extern zu sein scheint. trotzdem habe ich sogar schon programme gesehen, die eben solch ein submit-form scheinbar intern haben...

    also, alles zu dem topic bitte hier rein....

    🙂



  • try
    {
    // crash
    }
    catch(...)
    {
    MessageBox(NULL,"Es hat boom gemacht","Aua",MB_OK);
    }
    


  • schau an! das sieht ja aus wie in java.....

    denke mal das ist C++-spezifisch, und geht nicht in C, right?

    und so benutzen dass alle programme, die ihren eigenen absturz abfangen können?

    dachte eher da gibts ne winAPI-funktion, die die attribute des laufenden programms ändert, oder so ähnlich.....



  • dachte eher da gibts ne winAPI-funktion

    naja, es gibt da verschiedene Ansätze... für WinAPI gibts da scon einigest, auf die schnelle:

    AbnormalTermination
    GetExceptionCode
    GetExceptionInformation
    RaiseException
    SetUnhandledExceptionFilter
    UnhandledExceptionFilter

    Ich persönlich habe bis jetzt nur SetUnhandledExceptionfilter benutz, als ich "fremde" DLLs eingebunden habe, so dass bei einem Absturz der User die möglichkeit zum Abspeichern bekommt (bzw. man kann dann immer noch bestimmte einstellungen speicher oder das Programm neustarten).



  • aja, interessant. danke 🙂


Log in to reply