在try-catch块中包含主应用程序对象会捕获所有崩溃吗?

时间:2016-07-07 22:13:11

标签: c++ debugging exception

如果我将主应用程序对象包含在try-catch块中,它是否会捕获任何无法预料的崩溃?如果应用程序因任何原因而崩溃,控件是否会出现在这里?

以下是使用Qt应用程序的示例,但假设此应用程序非常大,加载其他dll等,但仍然这将是应用程序的主体。那么这个区块是否会有效保护该应用程序中的所有内容?

    #include <QApplication>
    #include <QTextEdit>

    int main(int argv, char **args)
    {
        int exit_code = 0;

        try
         {
             QApplication app(argv, args);

             QTextEdit textEdit;
             textEdit.show();

            exit_code = app.exec();
        }
        catch(...)
        {
            // will this catch all crashes?
        }

        return exit_code;
    }

技术上异常处理程序显然会捕获该块中抛出的任何异常,但我想知道如何将整个app封装在catch块中。

另外我知道它可能不会做任何有用的事情,因为我们不知道抛出/抓住了什么异常但是我想知道我是否可以使用它来捕捉一个神秘而随机的崩溃?它是否会捕获例如访问冲突0xc0000005 excpetion?

1 个答案:

答案 0 :(得分:1)

你绝对可能会崩溃。

try-catch块只会捕获通过throw关键字引发的异常 例如,如果您在内存之外访问,或者除以零,则程序可能会崩溃,也可能不会崩溃。

此外,try-catches无法阻止abort()终止该计划。

您的access violation可能是细分错误。您需要防止问题发生。