在程式設計中,經常會出現異常情況,觸發異常,擾亂正常的執行流程。雖然找出您故意產生的異常的來源通常很簡單,但追蹤未處理的異常或外部系統產生的異常的來源可能具有挑戰性。
一種方法是依賴異常的內建訊息,其中可能包括指向導致錯誤的行和來源檔案的指標。但是,此資訊並不總是在所有情況下可用或可靠。
要解決此限制,請考慮使用封裝原始異常和來源資訊的自訂異常類別。這使您能夠以全面且用戶友好的方式處理異常,並提供有關其起源的精確詳細資訊。
以下是如何實現此類自訂異常類:
#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中文網其他相關文章!