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

Will enclosing main application object in try-catch block catch all crashes?

本文关键字:崩溃 try-catch 应用程序 对象 包含      更新时间:2023-10-16

如果我将主应用程序对象包含在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;
    }

从技术上讲,异常处理程序显然会捕获该块中抛出的任何异常,但我想知道这如何扩展到将整个应用程序包含在捕获块中。

我也知道它可能不会做任何有用的事情,因为我们不知道抛出/捕获了什么异常,但我想知道我是否可以使用它来捕获神秘而随机的崩溃?例如,它会捕获访问违规0xc0000005排除吗?

绝对你仍然可以崩溃。

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

此外,try-catches无法阻止abort()终止程序。

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