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

C でハンドルされない例外の原因を特定するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-16 17:48:03331ブラウズ

How to Pinpoint the Origin of Unhandled Exceptions in C  ?

未処理例外の原因の特定

例外処理では、原因を特定するために行番号とソース ファイル名を含めるのが一般的です。例外です。例外が手動で生成される場合、この情報は簡単に追加できます。ただし、ハンドルされない例外や明示的にスローされない例外は問題を引き起こす可能性があります。

マクロでのカスタム例外クラスの使用

この制限を克服するには、より堅牢な解決策は次のとおりです。カスタム例外クラスとマクロを使用します。次の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。