未処理例外の原因の特定
例外処理では、原因を特定するために行番号とソース ファイル名を含めるのが一般的です。例外です。例外が手動で生成される場合、この情報は簡単に追加できます。ただし、ハンドルされない例外や明示的にスローされない例外は問題を引き起こす可能性があります。
マクロでのカスタム例外クラスの使用
この制限を克服するには、より堅牢な解決策は次のとおりです。カスタム例外クラスとマクロを使用します。次の C コードは、これを実現する方法を示しています。
#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; } }
このコードを実行すると、次のエラー メッセージが表示されます。 print:
myFile.cpp:255: Oh no!
これにより、例外がスローされたファイルと行番号が明確に識別され、問題のデバッグと解決に貴重な情報が提供されます。
以上がC でハンドルされない例外の原因を特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。