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

如何找出程式碼中未處理異常的來源?

Patricia Arquette
發布: 2024-11-16 15:33:03
原創
400 人瀏覽過

How can I pinpoint the source of unhandled exceptions in my code?

識別未處理異常的來源

在異常處理領域,找出異常根本原因的能力至關重要。雖然在創建異常時包含附加資訊相當簡單,但確定未處理或外部異常產生的確切程式碼行可能具有挑戰性。

自訂類別和巨集來救援

一個有效的解決方案是使用自訂異常類別和巨集。我們可以定義一個自訂異常類別 my_exception,它擴展了標準 std::runtime_error。在此類中,我們使用異常的檔案名稱、行號和原始錯誤訊息初始化一則訊息。

接下來,我們建立一個巨集 throw_line(),它接受一個參數並使用適當的參數拋出 my_exception資訊。該巨集簡化了拋出包含詳細錯誤上下文的異常的過程。

示範:

讓我們考慮以下範例程式碼:

#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:20: Oh no!
登入後複製

如您所見,它提供了詳細的錯誤訊息,其中包括確切的檔案名稱、行號和異常參數。這些資訊極大地簡化了調試並允許有效的根本原因分析。

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

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