forked from qt-creator/qt-creator
Add Crashpad to Qt Creator and Qt Design Studio
Fixes: QDS-2748 Change-Id: I87e25682f066d167eebfd7b78c46c166e5062e11 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -44,6 +44,13 @@
|
||||
#include <qtsystemexceptionhandler.h>
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
||||
#define NOMINMAX
|
||||
#include "client/crashpad_client.h"
|
||||
#include "client/crash_report_database.h"
|
||||
#include "client/settings.h"
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
@@ -98,6 +105,44 @@ void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QS
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
||||
bool startCrashpad()
|
||||
{
|
||||
using namespace crashpad;
|
||||
|
||||
// Cache directory that will store crashpad information and minidumps
|
||||
base::FilePath database(L"crashpad_reports");
|
||||
base::FilePath handler(L"crashpad_handler.exe");
|
||||
|
||||
// URL used to submit minidumps to
|
||||
std::string url(CRASHPAD_BACKEND_URL);
|
||||
|
||||
// Optional annotations passed via --annotations to the handler
|
||||
std::map<std::string, std::string> annotations;
|
||||
annotations["qt-version"] = QT_VERSION_STR;
|
||||
|
||||
// Optional arguments to pass to the handler
|
||||
std::vector<std::string> arguments;
|
||||
|
||||
CrashpadClient *client = new CrashpadClient();
|
||||
bool success = client->StartHandler(
|
||||
handler,
|
||||
database,
|
||||
database,
|
||||
url,
|
||||
annotations,
|
||||
arguments,
|
||||
/* restartable */ true,
|
||||
/* asynchronous_start */ true
|
||||
);
|
||||
// TODO: research using this method, should avoid creating a separate CrashpadClient for the
|
||||
// puppet (needed only on windows according to docs).
|
||||
// client->SetHandlerIPCPipe(L"\\\\.\\pipe\\qml2puppet");
|
||||
|
||||
return success;
|
||||
}
|
||||
#endif
|
||||
|
||||
int internalMain(QGuiApplication *application)
|
||||
{
|
||||
QCoreApplication::setOrganizationName("QtProject");
|
||||
@@ -180,6 +225,10 @@ int internalMain(QGuiApplication *application)
|
||||
QtSystemExceptionHandler systemExceptionHandler(libexecPath);
|
||||
#endif
|
||||
|
||||
#if defined(ENABLE_CRASHPAD) && defined(Q_OS_WIN)
|
||||
startCrashpad();
|
||||
#endif
|
||||
|
||||
new QmlDesigner::Qt5NodeInstanceClientProxy(application);
|
||||
|
||||
#if defined(Q_OS_WIN) && defined(QT_NO_DEBUG)
|
||||
|
||||
Reference in New Issue
Block a user