首頁 > 後端開發 > C++ > 如何找出 C 中未處理異常的根源?

如何找出 C 中未處理異常的根源?

Barbara Streisand
發布: 2024-11-16 17:48:03
原創
330 人瀏覽過

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;
    }
}
登入後複製

執行此程式碼時,會列印以下錯誤訊息:

myFile.cpp:255: Oh no!
登入後複製

這清楚地標識了引發異常的檔案和行號,提供對於偵錯和解決問題有價值的資訊。

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

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