5

可能重复:
如何从捕获的异常中打印消息?

抱歉,如果这是基本的或重复的 - 我先进行了几次搜索,但没有找到任何可以回答这个问题的东西。

如果我做一些基本的事情,比如:

throw exception("This thing didn't work");

我在哪里可以看到?该字符串不会显示在输出控制台、堆栈跟踪或与项目关联的任何 .log 文件中。让我想知道为什么如果在任何地方都看不到它,我什至会在那里放一根绳子。我当然可以使用堆栈跟踪来查看它在哪里爆炸,但这违背了首先出现异常的目的。

在 Java 中,当我给它一个字符串时,我会在输出的某处看到该字符串。我只是想知道是否可以在 C++ 中重现这种行为。

4

2 回答 2

5

std::exception()有一个名为 的成员函数what()。看:

http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.3/classstd_1_1exception.html

对于类似的东西std::logic_error,它会返回您传递给构造函数的文本。

于 2012-07-31T15:47:29.397 回答
1

您必须捕获异常才能看到字符串。有一个最后的异常处理程序可能很有用,如下所示:

int main(int argc, char **argv)
{
    try {
        ...
    }
    catch(const std::exception& e) {
        std::cout << "Uncaught exception: " << e.what() << std::endl;
    }
}

在 GUI 应用程序中,您可以在主事件循环中使用 catch 语句,并在消息框中显示错误消息。

在事件驱动的非 GUI 应用程序中,您还可以在主事件循环中使用 catch 语句,并将错误消息写入日志文件。

这些方法将确保您看到所有异常。当然,大多数异常应该在它们到达最后的异常处理程序之前被捕获。

于 2012-07-31T16:44:54.293 回答