未処理例外の正確なソースの特定
多くの場合、たとえ例外が発生したとしても、例外を引き起こした特定のコード行を特定することが望ましいです。プログラマによって明示的に生成されたものではありません。
カスタム例外クラスとマクロ
推奨されるアプローチには、カスタム例外クラスと対応するマクロの作成が含まれます。例:
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__);
使用法:
my_Exception クラスは、ファイル名、行番号、およびユーザー定義のエラー メッセージを含むカスタマイズされた例外メッセージを構築します。 throw_line マクロは、これらの拡張エラー メッセージを含むカスタム例外を生成するために使用されます。
次の例では、throw_line マクロは関数 f 内で使用されます。
void f() { throw_line("Oh no!"); }
f が例外をスローすると、 main 関数はそれをキャッチし、カスタマイズされたエラー メッセージをコンソールに出力します。
int main() { try { f(); } catch (const std::runtime_error &ex) { std::cout << ex.what() << std::endl; } }
このアプローチは、例外が明示的に生成されたかどうかに関係なく、その原因に関する詳細情報を含む例外を生成するための便利なメカニズムを提供します。
以上が未処理の例外の正確な原因を特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。