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.
问题是您正在切片异常对象 - 您正在按值捕获它,因此任何子类信息都会丢失.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子句的顺序很重要:它们按顺序处理,并使用第一个匹配.因此必须在基类之前列出派生类.