抛出的异常中的文本去了哪里

Where does the text in a thrown exception go?

本文关键字:异常 文本      更新时间:2023-10-16

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

如果这是基本的或重复的,我很抱歉——我先做了几次搜索,但没有找到任何答案。

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

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

我在哪里可以看到它?该字符串不会显示在输出控制台、堆栈跟踪或与项目关联的任何.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;
    }
}

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

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

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