来自std :: exception的更多信息

vit*_*rov 0 c++ qt gcc exception

我正在为ARM处理器编写QT应用程序.我使用gcc-linaro-arm-linux-gnueabihf compiller.

我尝试抓住std :: exception

try
{        
   ----CODE HERE----
}
catch(QException e)
{
    qCritical() << e.what();
}
catch(std::exception e)
{
    qCritical() << e.what();
}
Run Code Online (Sandbox Code Playgroud)

作为输出我有:

----- Dev started -----
std::exception
----- Dev finished -----
Run Code Online (Sandbox Code Playgroud)

没有关于例外的详细信息.

我可以看到什么样的std :: excpetpion发生了吗?

另一个问题是,它是qt应用程序.Makefile由qmake生成.我不能直接将选项传递给gcc compiller.

Rei*_*ica 5

问题是您正在切片异常对象 - 您正在按值捕获它,因此任何子类信息都会丢失.const &相反,抓住它以保持其类型和数据存活:

catch(const std::exception &e)
{
    qCritical() << e.what();
}
Run Code Online (Sandbox Code Playgroud)

此外,如果您需要对更具体的类型(派生自的类std::exception)进行特殊处理,您可以添加它:

catch (const std::invalid_argument &e)
{
  qCritical() << "Invalid argument: " << e.what();
}
catch (const std::domain_error &e)
{
  qCritical() << "Domain error: " << e.what();
}
catch (const std::excetion &e)
{
  qCritical() << "Other exception: " << e.what();
}
Run Code Online (Sandbox Code Playgroud)

请注意,catch子句的顺序很重要:它们按顺序处理,并使用第一个匹配.因此必须在基类之前列出派生类.