識別未處理異常的確切來源
通常需要確定導致異常的特定程式碼行,即使它不是由程式設計師明確生成的。
自訂異常類別和巨集
建議的方法包括建立自訂異常類別和對應的巨集。例如:
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__);
用法:
my_exception 類別建構自訂異常訊息,其中包含檔案名稱、行號和使用者定義的錯誤訊息。 throw_line 巨集用於產生帶有這些增強的錯誤訊息的自訂異常。
在以下範例中,在函數f 中使用throw_line 巨集:
void f() { throw_line("Oh no!"); }
當f 拋出異常時, main 函數會擷取它並將自訂的錯誤訊息印到控制台:
int main() { try { f(); } catch (const std::runtime_error &ex) { std::cout << ex.what() << std::endl; } }
這種方法提供了一種方便的機制,用於生成異常及其來源的詳細信息,無論它們是否是顯式生成的。
以上是如何查明未處理異常的確切來源?的詳細內容。更多資訊請關注PHP中文網其他相關文章!