抛出异常中的文本在哪里?

Dar*_*man 5 c++ exception

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

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

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

throw exception("This thing didn't work");
Run Code Online (Sandbox Code Playgroud)

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

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

Stu*_*etz 5

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

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

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


Joh*_*åde 1

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

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 语句,并将错误消息写入日志文件。

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