使用调试/崩溃报告将应用程序部署到客户端

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用调试/崩溃报告将应用程序部署到客户端相关的知识,希望对你有一定的参考价值。

我创建了一个Qt应用程序,该应用程序可以在Linux和Windows中进行编译。此外,使用Qt installer framework我为两个OS创建了安装程序。但是,我的应用程序仍然存在一些错误。我知道如何使用计算机上的调试器对其进行调试,但是当有人使用我创建的安装程序对其进行安装时,我无法跟踪最终用户计算机中可能发生的分段错误。

有些程序会执行某种崩溃日志,因此当它们崩溃时,可以将日志文件发送给开发人员以尝试找出问题所在。我可以通过在应用程序中添加一个日志系统来实现类似的功能,该系统可以记录用户在应用程序中始终在做什么(打印到文件中)。但是,这是一种非常复杂的方法,最终涉及很多书面内容。对我来说,似乎应该有某种自动工具可以在安装了应用程序的计算机中“以调试模式运行程序”(即创建崩溃报告)。 有人知道只在您开发的应用程序仅安装但未编译的计算机上创建崩溃报告的方法吗?我认为我必须在RelWithDebInfo中编译我的项目才能在该字段中实现某些目标,但这不是一个问题。

答案

对于在主要平台(Windows,Mac OS,Linux)上的自动崩溃报告,您可以使用开源库Google Breakpad(例如在Firefox中使用),或使用更现代的Google Crashpad(例如在Chromium中使用) )。这两个C ++库在崩溃时将生成一个MiniDump文件,可以根据需要将其发送到远程服务器。

例如,这里是一个集成了Google Crashpad的基本Qt应用程序:

#include <QtWidgets/qapplication.h>
#include <QtWidgets/qmainwindow.h>

#include <client/crashpad_client.h>

void initializeCrashpad()
{
    const auto dataDir = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
    const auto db = dataDir + "/metrics/db";
    const auto metrics = dataDir + "/crash/metrics";
    const auto url = "https://my-http-server.com/"

    QDir().mkpath(db);
    QDir().mkpath(metrics);

    crashpad::CrashpadClient::StartHandler(
        "crashpad_handler.exe", // Relative path to a Crashpad handler executable
        db.toStdWString(), // Directory to Crashpad database 
        metrics.toStdWString(), // Directory where metrics files can be stored
        url.toStdString(), // URL of the HTTP upload server
        {}, // Annonations to include in the crash report
        true, // The program will be restarted if it crash
        true);
}

int main(int argc, char* argv[])
{
    initializeCrashpad();

    QApplication app(argc, argv);
    QMainWindow window;
    window.show();
    return app.exec();
}

然后,您将需要将应用程序附带crash_handler.exe(或您所称的名称)一起发布,或者使用crashpad::HandlerMain()实现此小程序。有关更多信息,请在Google上搜索,或阅读Crashpad文档。

否则,您可以使用免费/不免费服务Backtrace.ioSentry,该服务提供了将Crashpad集成到您的应用程序中的教程,还提供了带有许多工具的上载服务器。

以上是关于使用调试/崩溃报告将应用程序部署到客户端的主要内容,如果未能解决你的问题,请参考以下文章

让Android Studio调试版崩溃的Google Play Developer Console?

使用地图片段(kotlin)时,活动在充气时崩溃

Swift 中的 Xcode 调试/崩溃报告是不是损坏?

如何从 Firebase 获取数据到 Recyclerview 中的片段?

使用来自苹果的崩溃报告查找崩溃的根源

应用程序在调试时运行时如何禁用 Firebase 崩溃报告?