Diese Anwendung hat die Runtime aufgefordert, sie auf ungewöhnliche Weise zu beenden.

8

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:

  1. Eine formale Erklärung, warum diese Art von Terminierung existiert (und welche Windows-Plattformen, falls relevant).
  2. Eine Liste aller Gründe oder zumindest der häufigsten Gründe, warum diese Art von Absturz auftritt.

Weiß jemand, wo diese Informationen gefunden werden können? Kann jemand diese Informationen zur Verfügung stellen?

    
Brent Arias 22.03.2011, 18:09
quelle

1 Antwort

10

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.

    
Erik 22.03.2011, 18:14
quelle

Tags und Links