首页 > 后端开发 > C++ > 正文

如何查明 C 中未处理异常的根源?

Barbara Streisand
发布: 2024-11-16 17:48:03
原创
261 人浏览过

How to Pinpoint the Origin of Unhandled Exceptions in C  ?

确定未处理异常的来源

在异常处理中,通常会包含行号和源文件名来查明异常原因一个例外。当手动生成异常时,可以轻松添加此信息。然而,未处理的异常和未显式抛出的异常可能会带来挑战。

将自定义异常类与宏结合使用

要克服此限制,更强大的解决方案是使用自定义异常类和宏。以下 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板