ホームページ > バックエンド開発 > C++ > 未処理の例外の正確な原因を特定するにはどうすればよいですか?

未処理の例外の正確な原因を特定するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-14 11:30:02
オリジナル
405 人が閲覧しました

How to Pinpoint the Exact Source of Unhandled Exceptions?

未処理例外の正確なソースの特定

多くの場合、たとえ例外が発生したとしても、例外を引き起こした特定のコード行を特定することが望ましいです。プログラマによって明示的に生成されたものではありません。

カスタム例外クラスとマクロ

推奨されるアプローチには、カスタム例外クラスと対応するマクロの作成が含まれます。例:

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 &amp;ex) {
        std::cout << ex.what() << std::endl;
    }
}
ログイン後にコピー

このアプローチは、例外が明示的に生成されたかどうかに関係なく、その原因に関する詳細情報を含む例外を生成するための便利なメカニズムを提供します。

以上が未処理の例外の正確な原因を特定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート