确定未处理异常的来源
在异常处理中,通常会包含行号和源文件名来查明异常原因一个例外。当手动生成异常时,可以轻松添加此信息。然而,未处理的异常和未显式抛出的异常可能会带来挑战。
将自定义异常类与宏结合使用
要克服此限制,更强大的解决方案是使用自定义异常类和宏。以下 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中文网其他相关文章!