未処理例外のソースの特定
例外処理の領域では、例外の根本原因を特定する機能が最も重要です。例外を作成するときに追加情報を含めるのは非常に簡単ですが、ハンドルされない例外または外部例外が発生するコード行を正確に判断するのは困難な場合があります。
カスタム クラスとマクロで解決
効果的な解決策の 1 つは、カスタム例外クラスとマクロを使用することです。標準の std::runtime_error を拡張するカスタム例外クラス my_Exception を定義できます。このクラス内で、例外のファイル名、行番号、および元のエラー メッセージを使用してメッセージを初期化します。
次に、引数を受け取り、適切なメソッドを使用して my_Exception をスローするマクロ throw_line() を作成します。情報。このマクロは、詳細なエラー コンテキストを含む例外をスローするプロセスを簡素化します。
デモ:
次のコード例を考えてみましょう:
#include <iostream> #include <sstream> #include <stdexcept> #include <string> 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__); void f() { throw_line("Oh no!"); } int main() { try { f(); } catch (const std::runtime_error &ex) { std::cout << ex.what() << std::endl; } }
このコードを実行すると、出力は次のようになります。
myFile.cpp:20: Oh no!
ご覧のとおり、正確なファイル名、行番号、例外引数を含む詳細なエラー メッセージが表示されます。この情報により、デバッグが大幅に簡素化され、根本原因の効率的な分析が可能になります。
以上がコード内の未処理例外の原因を特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。