首頁 >後端開發 >C++ >如何查明未處理異常的確切來源?

如何查明未處理異常的確切來源?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-14 11:30:02407瀏覽

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 巨集用於產生帶有這些增強的錯誤訊息的自訂異常。

在以下範例中,在函數f 中使用throw_line 巨集:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn