我在我的C++程序中抛出了这个错误,但没有进行处理:
throw std::runtime_error("X failed because " + my_string);
我使用Visual Studio 2013编译和运行时,出现以下错误:
在bla.exe中的0x7617C42D处发生未处理的异常:Microsoft C++ 异常: std::runtime_error,内存位置为0x009FEA98。
我如何在不在代码中处理错误的情况下看到消息“X失败,因为…”?
我在我的C++程序中抛出了这个错误,但没有进行处理:
throw std::runtime_error("X failed because " + my_string);
我使用Visual Studio 2013编译和运行时,出现以下错误:
在bla.exe中的0x7617C42D处发生未处理的异常:Microsoft C++ 异常: std::runtime_error,内存位置为0x009FEA98。
我如何在不在代码中处理错误的情况下看到消息“X失败,因为…”?
what()
输出到调试输出。虽然这不需要您添加catch块来处理抛出异常的位置,但需要您使用包装器类包装所有的throw调用。例如:class ExceptionOutputDebug : public std::exception
{
public:
ExceptionOutputDebug(const std::exception& e)
{
OutputDebugString(e.what());
OutputDebugString("\n");
if (1) // avoids C4702 (unreachable code)
throw e;
}
};
使用方法:
throw ExceptionOutputDebug(std::runtime_error("Die"));
Die
First-chance exception at 0x76CAC42D in blah.exe: Microsoft C++ exception: std::exception at memory location 0x019EFEBC.
OutputDebugString
调用已被替换为某些外部日志记录机制(可以是控制台应用程序的简单printf
),它也可能很有用。
catch
块?如果没有,那么你当然会收到“未处理的异常”消息。 - PaulMcKenziewhat()
,而不仅仅是知道出现了未处理异常。 - Annaterminate()
函数。据我所知,在这一点上,抛出的异常对象并没有在未预期处理程序中提供,因此无法确定其内容可能是什么。 - Colin Robertson