gpt4 book ai didi

c++ - 如何让C++像python一样给出详细的异常信息?

转载 作者:太空狗 更新时间:2023-10-29 21:01:50 25 4
gpt4 key购买 nike

使用 python,当发生异常时,即使没有捕获,我也可以获得有关引发错误的文件的详细信息:

def hello():
raise Exception;

hello()

Execution result >>

Traceback (most recent call last):
File "exceptionExample.py", line 4, in <module>
hello()
File "exceptionExample.py", line 2, in hello
raise Exception;
Exception

对于 C++,信息不是那么有用:

#include <iostream>

using namespace std;

class Error
{
};

int value()
{
throw Error();
}

int main(int argc, char *argv[]) {
value();
}

>>

terminate called after throwing an instance of 'Error'
Run Command: line 1: 52772 Abort trap: 6 ./"$2" "${@:3}"

如何让 C++ 提供更详细的信息,说明哪个模块从哪一行引发了错误?

我想在没有 catch 子句的情况下使用它。

最佳答案

您可以在异常消息中使用 __FILE____LINE__ 定义。

例如:

#include <stdexcept>

class Error : public std::runtime_error
{
public:
Error (const std::string &message)
: std::runtime_error(message)
{}

};

int value()
{
std::stringstream ss;
ss << "Issues at " << __FILE__ << " on line " << __LINE__;
throw Error(ss.str());
}

在这个例子中,我让 Error 继承自 std::runtime_error(它有一个构造函数允许您将消息作为字符串传递)...

另外,看看这个 SO 问题:Global Exception Handling - 注意关于使用 set_terminate 函数的答案。这将允许您安装一个全局处理程序,以确保按您的需要打印消息。这是关于 set_terminate() 的一些信息.

Python 为未捕获的异常提供堆栈跟踪。我提供的答案只告诉您文件和行号。如果您需要堆栈跟踪,一些评论者已经引用了一些其他 SO 问题,这些问题提供了有关如何在 C++ 中执行此操作的建议。但是,请注意针对此问题的非标准解决方案。

关于c++ - 如何让C++像python一样给出详细的异常信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17111856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com