Для автоматического 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 в ваше приложение, а также сервер загрузки с множеством инструментов.