Identifizieren der genauen Quelle nicht behandelter Ausnahmen
Oft ist es wünschenswert, die spezifische Codezeile zu ermitteln, die eine Ausnahme verursacht hat, auch wenn dies der Fall ist wurde nicht explizit vom Programmierer generiert.
Benutzerdefinierte Ausnahmeklasse und Makro
Ein empfohlener Ansatz besteht darin, eine benutzerdefinierte Ausnahmeklasse und ein entsprechendes Makro zu erstellen. Zum Beispiel:
class my_exception : public std::runtime_error { std::string msg; public: my_exception(const std::string &arg, const char *file, int line) : std::runtime_error(arg) { std::ostringstream o; o << file << ":" << line << ": " << arg; msg = o.str(); } ~my_exception() throw() {} const char *what() const throw() { return msg.c_str(); } }; #define throw_line(arg) throw my_exception(arg, __FILE__, __LINE__);
Verwendung:
Die Klasse my_Exception erstellt benutzerdefinierte Ausnahmemeldungen, die den Dateinamen, die Zeilennummer und eine benutzerdefinierte Fehlermeldung enthalten. Das Makro „throw_line“ wird verwendet, um benutzerdefinierte Ausnahmen mit diesen erweiterten Fehlermeldungen zu generieren.
Im folgenden Beispiel wird das Makro „throw_line“ innerhalb der Funktion f verwendet:
void f() { throw_line("Oh no!"); }
Wenn f die Ausnahme auslöst, Die Hauptfunktion fängt es ab und gibt die angepasste Fehlermeldung an die Konsole aus:
int main() { try { f(); } catch (const std::runtime_error &ex) { std::cout << ex.what() << std::endl; } }
Dieser Ansatz bietet einen praktischen Mechanismus zum Generieren von Ausnahmen mit detaillierten Informationen zu ihren Ausnahmen Herkunft, unabhängig davon, ob sie explizit generiert wurden oder nicht.
Das obige ist der detaillierte Inhalt vonWie lässt sich die genaue Quelle nicht behandelter Ausnahmen ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!