確定未處理異常的來源
在異常處理中,通常會包含行號和來源檔案名稱來找出異常原因一個例外。當手動產生異常時,可以輕鬆新增此資訊。然而,未處理的異常和未明確拋出的異常可能會帶來挑戰。
將自訂異常類別與巨集結合使用
要克服此限制,更強大的解決方案是使用自訂異常類別和巨集。以下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中文網其他相關文章!