2012-07-31 6 views
5

Mögliche Duplizieren:
How to print message from caught exception?Wohin geht der Text in einer geworfenen Ausnahme?

Entschuldigt, wenn diese grundlegende oder dupliziert ist - ich habe zuerst mehrere Suchen, aber nichts gefunden, die diese beantwortet.

Wenn ich etwas tun Grund wie:

throw exception("This thing didn't work"); 

Wo kann ich das gesehen? Die Zeichenfolge wird nicht in der Ausgabekonsole, in der Stapelprotokollierung oder in einer der mit dem Projekt verknüpften .log-Dateien angezeigt. Ich frage mich, warum ich dort überhaupt eine Schnur hinlege, wenn sie nirgendwo zu sehen ist. Ich kann natürlich die Stack-Trace benutzen, um zu sehen, wo es explodiert ist, aber das verhindert den Zweck, Ausnahmen zu haben.

In Java, wenn ich es eine Zeichenfolge gebe, werde ich irgendwo in der Ausgabe diese Zeichenfolge sehen. Ich frage mich nur, ob es möglich ist, dieses Verhalten in C++ zu reproduzieren.

+1

Ich denke, es kann gesehen werden, wenn die Ausnahme abgefangen wird. Abgesehen davon, wahrscheinlich Crash-Dump? – nhahtdh

+1

Sie * sind * die Ausnahme fangen, bist du? –

+2

Technisch ist das nicht gültig. Sie verwenden einen Fehler in der MS-Bibliothek (std :: exception hat keinen Konstruktor, der eine Zeichenfolge akzeptiert). Aber Ihr Punkt ist gültig, wenn Sie zu 'std :: runtime_error wechseln (" Diese Sache hat nicht funktioniert "). –

Antwort

1

Sie müssen die Ausnahme abfangen, um die Zeichenfolge sehen zu können. Es kann sinnvoll sein, einen Exception-Handler der letzten Instanz haben wie folgt:

int main(int argc, char **argv) 
{ 
    try { 
     ... 
    } 
    catch(const std::exception& e) { 
     std::cout << "Uncaught exception: " << e.what() << std::endl; 
    } 
} 

In einer GUI-Anwendung Sie eine catch-Anweisung in der Hauptereignisschleife haben können, und zeigen Sie die Fehlermeldung in einem Meldungsfeld .

In einer ereignisgesteuerten Nicht-GUI-Anwendung können Sie auch eine catch-Anweisung in der Hauptereignisschleife haben und die Fehlermeldung in eine Protokolldatei schreiben.

Diese Methoden stellen sicher, dass Sie alle Ausnahmen sehen. Natürlich sollten die meisten Ausnahmen abgefangen werden, bevor sie Ihren Ausnahmebehandler des letzten Ausweges erreichen.

+0

Das ist es wahrscheinlich. Das Problem ist, dass einige der Abstürze durch Angriffe in Bibliotheken verursacht werden, und es scheint keine Möglichkeit zu geben, diese abzufangen, so dass selbst ein letzter Versuch/Fang nicht alles erfasst ... –

Verwandte Themen