Im Laufe der Jahre habe ich gesehen, dass C ++ - Anwendungen bei einem Absturz die "ungewöhnliche Art" verwenden. Zum Beispiel:
Diese Anwendung hat die Runtime aufgefordert, sie auf ungewöhnliche Weise zu beenden. Bitte kontaktieren Sie das Support-Team der Anwendung für weitere Informationen.
Als erstes habe ich debugged, es hatte etwas damit zu tun, dass ein Destruktor für eine Klasse ausgelöst wurde, in einer Vererbungskette, die bereits gelöscht wurde. Ich kann mich an die Einzelheiten nicht mehr erinnern. Wenn ich dieses Thema google, finde ich ein oder zwei andere mögliche Ursachen. Zum Beispiel, dass die Binaries selbst korrupt geworden sind und neu geschrieben werden müssen.
Insgesamt finde ich die Informationen über diese Art von Crash viel zu dünn. Ich möchte zwei Dinge sehen:
Weiß jemand, wo diese Informationen gefunden werden können? Kann jemand diese Informationen zur Verfügung stellen?
Dieser Dialog wird von der Visual Studio-Laufzeit als Antwort auf abort()
erzeugt. abort()
wird standardmäßig von z. %Code%. Sie erhalten dies von z.B. unbehandelte C ++ - Ausnahmen, Aufruf von reinen virtuellen Dateien, fehlgeschlagene Assertions.
Es ist also nicht plattformabhängig, sondern abhängig von der Laufzeitbibliothek. terminate()
ist nach dem C ++ - Standard erforderlich, um das Programm zu beenden, ohne Destruktoren für automatische und statische Speicherobjekte auszuführen, und ohne abort()
handlers aufzurufen.