Heim > Backend-Entwicklung > C++ > Wie lässt sich die genaue Quelle nicht behandelter Ausnahmen ermitteln?

Wie lässt sich die genaue Quelle nicht behandelter Ausnahmen ermitteln?

Mary-Kate Olsen
Freigeben: 2024-11-14 11:30:02
Original
403 Leute haben es durchsucht

How to Pinpoint the Exact Source of Unhandled Exceptions?

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__);
Nach dem Login kopieren

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!");
}
Nach dem Login kopieren

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 &amp;ex) {
        std::cout << ex.what() << std::endl;
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage