检测QApplication退出正常或崩溃

时间:2016-12-20 09:47:43

标签: qt

我需要检测应用程序是否正常退出或崩溃。 QProcess具有finished()信号并且可以获得退出代码。但是当应用程序崩溃或关闭时,我需要QApplication的退出代码。

2 个答案:

答案 0 :(得分:2)

当您的流程崩溃时,它就消失了。崩溃意味着由于未处理的异常,进程已完成。你的工作应该是防止崩溃。换句话说:处理异常。请注意,异常可能不是C ++异常,它们可能是低级平台特定机制,例如Windows上的本机异常或UNIX上的信号。您必须处理这些问题,但要认识到基本问题并不仅仅因为您捕获到这样的例外而得到解决。您必须假设应用程序的状态已损坏,唯一安全的做法是尽快退出ASAP。例如,不要尝试修改任何文件:您可能会损坏它们。

答案 1 :(得分:0)

我不认为这是你可以做的事情。读取QApplication::exec()返回的值与Qt基础结构有关:

  

进入主事件循环并等待直到调用exit(),然后   返回设置为exit()的值(如果exit()为0则为0)   通过quit()调用。

通常你的主要是这样的:

#include <QApplication>

int main( int argc, char **argv )
{
    QApplication a( argc, argv );

    // Initialize your widget(s)

    return a.exec(); // You can store this and check its value
}

但是,如果我没有弄错,这不包括处理应用程序崩溃(分段错误,未处理的异常等)。在Linux中,人们通常使用启动应用程序的脚本,然后在应用程序退出或崩溃后读取其退出代码。如果您使用Linux,则可以使用echo $?从bash脚本(或其等效的不同shell)中读取退出代码,然后根据其值执行某些操作。

另请注意,您至少可以执行一些异常处理,因为某些崩溃会导致这种情况 - 由于某种原因而被抛出并且未正确处理的异常。 Qt中未处理的异常会传播到顶层(即QCoreApplication)。