識別未處理異常的來源
在異常處理領域,找出異常根本原因的能力至關重要。雖然在創建異常時包含附加資訊相當簡單,但確定未處理或外部異常產生的確切程式碼行可能具有挑戰性。
自訂類別和巨集來救援
一個有效的解決方案是使用自訂異常類別和巨集。我們可以定義一個自訂異常類別 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中文網其他相關文章!