首頁 > 後端開發 > C++ > 主體

如何確定 C 中未處理異常的確切來源?

Patricia Arquette
發布: 2024-11-18 12:18:02
原創
746 人瀏覽過

How Can I Identify the Exact Source of Unhandled Exceptions in 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!");
}
登入後複製

當使用觸發異常時透過這個宏,my_exception類會自動儲存來源訊息,包括檔案名稱和行號。

現在,讓我們示範如何使用這個自訂類別處理異常:

int main() {
    try {
        f();
    }
    catch (const std::runtime_error &ex) {
        std::cout << ex.what() << std::endl;
    }
}
登入後複製

透過利用自訂異常類別的what()函數,您可以獲得詳細的錯誤訊息,其中包括原始來源訊息,從而實現精確的錯誤診斷和解決。

以上是如何確定 C 中未處理異常的確切來源?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板