可能重复:
如何从捕获的异常中打印消息?
如果这是基本的或重复的道歉 - 我先做了几次搜索,但没有找到任何答案.
如果我做一些基本的事情:
throw exception("This thing didn't work");
Run Code Online (Sandbox Code Playgroud)
我在哪里可以看到它?字符串不会显示在输出控制台,堆栈跟踪或与项目关联的任何.log文件中.让我想知道为什么我甚至在那里放一根绳子,如果它在任何地方都看不到的话.我当然可以使用堆栈跟踪来查看它爆炸的位置,但这种方式首先会破坏出现异常的目的.
在Java中,当我给它一个字符串时,我会在输出的某处看到该字符串.我只是想知道是否有可能在C++中重现这种行为.
std::exception()有一个名为的成员函数what().看到:
http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.3/classstd_1_1exception.html
对于类似的东西std::logic_error,它会返回您传递给构造函数的文本.
您必须捕获异常才能看到该字符串。使用最后的异常处理程序可能会很有用,如下所示:
int main(int argc, char **argv)
{
try {
...
}
catch(const std::exception& e) {
std::cout << "Uncaught exception: " << e.what() << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
在 GUI 应用程序中,您可以在主事件循环中使用 catch 语句,并在消息框中显示错误消息。
在事件驱动的非 GUI 应用程序中,您还可以在主事件循环中使用 catch 语句,并将错误消息写入日志文件。
这些方法将确保您看到所有异常。当然,大多数异常应该在到达最后的异常处理程序之前捕获。