首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何捕获未知异常并打印出来

如何捕获未知异常并打印出来
EN

Stack Overflow用户
提问于 2010-06-19 14:52:13
回答 6查看 83.4K关注 0票数 64

我有一些程序,每次我运行它时,它都会抛出异常,我不知道如何检查它到底抛出了什么,所以我的问题是,是否可以捕获异常并打印它(我发现了抛出异常的行),谢谢提前

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-06-19 14:54:40

如果它是从std::exception派生的,你可以通过引用来捕获:

代码语言:javascript
复制
try
{
    // code that could cause exception
}
catch (const std::exception &exc)
{
    // catch anything thrown within try block that derives from std::exception
    std::cerr << exc.what();
}

但是如果异常是某个不是从std::exception派生的类,那么您必须提前知道它的类型(即您应该捕获std::stringsome_library_exception_base)。

您可以执行“全部捕获”:

代码语言:javascript
复制
try
{
}
catch (...)
{
}

但是,你不能对异常做任何事情。

票数 74
EN

Stack Overflow用户

发布于 2016-07-06 17:23:24

在C++11中有:std::current_exception

来自站点的示例代码:

代码语言:javascript
复制
#include <iostream>
#include <string>
#include <exception>
#include <stdexcept>

void handle_eptr(std::exception_ptr eptr) // passing by value is ok
{
    try {
        if (eptr) {
            std::rethrow_exception(eptr);
        }
    } catch(const std::exception& e) {
        std::cout << "Caught exception \"" << e.what() << "\"\n";
    }
}

int main()
{
    std::exception_ptr eptr;
    try {
        std::string().at(1); // this generates an std::out_of_range
    } catch(...) {
        eptr = std::current_exception(); // capture
    }
    handle_eptr(eptr);
} // destructor for std::out_of_range called here, when the eptr is destructed
票数 22
EN

Stack Overflow用户

发布于 2014-07-28 22:24:21

如果您使用ABI来表示gcc或CLANG,则可以知道未知的异常类型。但这是一个非标准的解决方案。

查看此处https://stackoverflow.com/a/24997351/1859469

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3074646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档