Frage

Meine Anwendung hat benutzerdefinierte crash-Handling eingebaut (siehe John Robbins' ausgezeichnetes Buch über "Debuggen von Windows-Anwendungen"). Um diese Funktionalität zu testen, habe ich immer das Windows-Funktion Debugbreak () verwendet und diese immer perfekt funktioniert. Da aber Windows 7, dem Aufruf dieser Funktion nur sagt: „Ein Haltepunkt erreicht wurde“, und stoppt die Anwendung ohne meine Crash-Handler aufrufen.

Ich konnte immer diesen Code in meiner Anwendung die Crash-Funktionalität zu testen:

int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;

oder sogar mehr Fälle hinzufügen, nur für den Fall 0xDEADBEEF eine gültige Adresse lautet:

int *ptr = (int *)0xdeadbeef;
*ptr = 123456789;
ptr = (int *)0L;
*ptr = 123456789;
ptr = (int *)0xffffffff;
*ptr = 123456789;

Aber ich habe mich gefragt: ist nicht ein sauberer Weg, um Ihre Anwendung unter Windows zum Absturz

War es hilfreich?

Lösung

Erstellen Sie einfach einen Null-Zeiger auf ein Objekt mit einigen Mitgliedsfunktionen einen Versuch und Anruf einer von ihnen? Und vielleicht ist es in einer Funktion tun, so dass Sie wissen, was es daoes

void CrashApp()
{
    MyObject * ptr = 0;
    ptr->Function();
}

Auf jeden Fall ist der einfachste Weg und ziemlich klar, was los ist

Andere Tipps

Sie können mit __debugbreak () intrinsischen statt Debugbreak () Funktion. Dies sagt nichts und stürzt mit EXCEPTION_BREAKPOINT

Raiseexception () ist noch eine weitere Weg zum Absturz bringen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top