Развертывание приложения на клиенте с отчетами отладки / cra sh - PullRequest
0 голосов
/ 22 февраля 2020

Я создал приложение Qt, которое можно скомпилировать как в Linux, так и Windows. Более того, используя Qt installer framework , я создал установщики для обеих ОС. Однако в моем приложении все еще есть ошибки. Я знаю, как отлаживать их с помощью отладчика на моем компьютере, но когда кто-то устанавливает его с помощью созданных мной установщиков, я не могу отследить ошибки сегментации, которые могут возникнуть на компьютере конечного пользователя.

Есть некоторые программы, которые делают своего рода cra sh -log, поэтому, когда они обрабатывают sh, файл журнала может быть отправлен разработчику, чтобы попытаться выяснить проблему. Я мог бы достичь чего-то подобного, добавив в свое приложение систему регистрации, которая регистрирует (печатает в файл), что пользователь постоянно делает в моем приложении. Тем не менее, это довольно сложный способ и требует много написания с моей стороны. Мне кажется, что на компьютерах, где установлено ваше приложение, должен быть какой-то автоматический c инструмент для «запуска ваших программ в режиме отладки» (т.е. создания отчета cra sh). Кто-нибудь знает способ создания кратких sh отчетов на компьютерах, на которых разработанное вами приложение только установлено, но не скомпилировано? Полагаю, мне нужно было бы скомпилировать свой проект в RelWithDebInfo, чтобы чего-то добиться в этом поле, которое не является проблемой.

1 Ответ

1 голос
/ 22 февраля 2020

Для автоматического c cra sh отчета на основных платформах (Windows, Ma c OS, Linux) вы можете использовать библиотеки с открытым исходным кодом Google Breakpad (используется в Firefox, например), или более современный Google Crashpad (используется в Chromium, например). Эти две библиотеки C ++ сгенерируют файл MiniDump на cra sh, который при желании можно будет отправить на удаленный сервер.

Например, вот базовое c приложение Qt, интегрирующее Google Crashpad:

#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.io или Sentry , который предоставляет учебные пособия по интеграции Crashpad в ваше приложение, а также сервер загрузки с множеством инструментов.

...