Ich arbeite an der Portierung einer Visual C++ - Anwendung auf GCC (sollte auf MingW und Linux aufbauen).Portable behandeln außergewöhnliche Fehler in C++
Der vorhandene Code verwendet __try { ... } __except(1) { ... }
Blöcke an einigen Stellen, so dass fast nichts (kurz von möglicherweise nicht genügend Speichertyp Fehler?) Das Programm beenden würde, ohne einige minimale Protokollierung zu tun.
Was sind die Möglichkeiten, etwas Ähnliches mit GCC zu tun?
Bearbeiten: Danke für den Zeiger auf/EH-Optionen in Visual Studio, was ich jetzt brauche, ist einige Beispiele, wie Signale unter Linux zu behandeln sind. Ich habe this message von 2002 gefunden.
Welche anderen Signale außer SIGFPE
und SIGSEVG
sollte ich aufpassen? (Pflege vor allem über diejenigen, die von mich etwas falsch erhöht werden könnte)
Bounty Informationen: Ich möchte meine Anwendung in der Lage sein Selbst log so viele Fehlerbedingungen wie möglich, bevor es austritt.
Welche Signale könnte ich bekommen und in der Regel wäre es unmöglich, eine Fehlermeldung zu protokollieren? (Nicht genug Arbeitsspeicher, was sonst noch?)
Wie kann ich mit Ausnahmen umgehen und (am wichtigsten) Signale in einer tragbaren Weise, dass der Code zumindest das gleiche auf Linux und MingW funktioniert. #ifdef ist in Ordnung.
Der Grund, warum ich nicht nur einen Wrapper-Prozess haben, der den Fehler meldet, ist, dass ich aus Performancegründen bis zur letzten Minute, einige Daten auf dem Datenträger speichern zu schreiben, so dass, wenn etwas schief geht, ich will alle möglichen Versuche machen, zu schreiben die Daten vor dem Beenden aus.
Das OP sucht nach Ausnahmebedingungen auf niedrigerer Ebene als C++ - Ausnahmen auf Sprachenebene. In einer POSIX-Welt bedeutet das, Signal-Handler für (fast) alles zu installieren. In MSVC behandelt der __try/__ catch-Mechanismus ähnliche Fehler (einschließlich des Win32-Äquivalents von SEGFAULT) –
Richtig über die Fallen. Sie können MSVC jedoch so konfigurieren, dass SEH mit dem Standard "try"/"catch" abgefangen wird, wie von DrPizza ausgearbeitet. –