Enthüllung der Quelle nicht behandelter Ausnahmen
Wenn während der Programmausführung Ausnahmen auftreten, kann die Rückverfolgung ihres Ursprungs für die Fehlerbehebung von entscheidender Bedeutung sein. Wenn in der Ausnahmemeldung keine expliziten Codezeileninformationen eingebettet sind, können unbehandelte und externe Ausnahmen Entwickler im Dunkeln tappen lassen.
Ein tieferer Einblick in benutzerdefinierte Ausnahmen und Makros
Um dieser Herausforderung zu begegnen, besteht eine robuste Lösung darin, eine benutzerdefinierte Ausnahmeklasse zu erstellen und Makros zu nutzen.
Die Klasse my_Exception erweitert die Klasse std::runtime_error und enthält ein zusätzliches msg-Mitglied zum Speichern der Ausnahmemeldung. Der Konstruktor dieser Klasse erstellt die Nachricht, indem er die Quelldatei, die Zeilennummer und das ursprüngliche Ausnahmeargument verkettet.
Als nächstes vereinfacht das Makro throw_line den Prozess des Auslösens einer Ausnahme mit Zeileninformationen. Es nimmt ein Argument, das die Ausnahmemeldung darstellt, und fügt automatisch die Datei- und Zeilennummerndetails zum my_Exception-Objekt hinzu.
In die Tat umsetzen
Bedenken Sie den folgenden Codeausschnitt:
void f() { throw_line("Oh no!"); } int main() { try { f(); } catch (const std::runtime_error &ex) { std::cout << ex.what() << std::endl; } }
Wenn innerhalb der f-Funktion eine Ausnahme ausgelöst wird, stellt das Makro throw_line sowohl die Ausnahmemeldung („Oh nein!“) als auch die Zeilennummer bereit, in der sie aufgetreten ist. Auf diese Informationen kann über die what()-Methode des my_Exception-Objekts zugegriffen werden.
Durch die Verwendung dieses Ansatzes erhalten Entwickler ein wertvolles Werkzeug zur genauen Identifizierung der Quelle von Ausnahmen, selbst wenn diese aus nicht behandelten oder externen Quellen stammen.
Das obige ist der detaillierte Inhalt vonSo lokalisieren Sie nicht behandelte Ausnahmen: Ein tiefer Einblick in benutzerdefinierte Ausnahmen und Makros. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!