kicad/thirdparty/sentry-native/external/crashpad/example.cpp

82 lines
2.4 KiB
C++

#include <stdio.h>
#include <atomic>
#include <chrono>
#include <iostream>
#include <map>
#include <string>
#include <thread>
#include <vector>
#include "client/crash_report_database.h"
#include "client/crashpad_client.h"
#include "client/crashpad_info.h"
#include "client/settings.h"
using namespace crashpad;
int init_crashpad() {
// Cache directory that will store crashpad information and minidumps
base::FilePath database("crashpad.db");
// Path to the out-of-process handler executable
base::FilePath handler("./out/Default/crashpad_handler");
// URL used to submit minidumps to
std::string url(
"http://localhost:8000/api/5/minidump/"
"?sentry_key=36811373240a4fc6b25f3040693462d5");
// Optional annotations passed via --annotations to the handler
std::map<std::string, std::string> annotations;
// Optional arguments to pass to the handler
std::vector<std::string> arguments;
arguments.push_back("--no-rate-limit");
std::map<std::string, base::FilePath> attachments;
attachments["attch_log_bla.txt"] = base::FilePath("/tmp/log.txt");
CrashpadClient client;
bool success = client.StartHandlerWithAttachments(handler,
database,
database,
url,
annotations,
attachments,
arguments,
/* restartable */ true,
/* asynchronous_start */ false);
if (success) {
printf("Started client handler.\n");
} else {
printf("Failed to start client handler.\n");
}
if (!success) {
return 1;
}
std::unique_ptr<CrashReportDatabase> db =
CrashReportDatabase::Initialize(database);
if (db != nullptr && db->GetSettings() != nullptr) {
db->GetSettings()->SetUploadsEnabled(true);
}
// Ensure that the simple annotations dictionary is set in the client.
CrashpadInfo* crashpad_info = CrashpadInfo::GetCrashpadInfo();
return 0;
}
void crash(uint sleep_sec) {
std::cerr << "Prepare to crash, sleeping for " << sleep_sec << " second(s)\n";
std::this_thread::sleep_for(std::chrono::seconds(sleep_sec));
memset((char*)0x0, 1, 100);
}
int main(int args, char* argv[]) {
init_crashpad();
const uint sleep_sec = args > 1 ? std::stoi(argv[1]) : 1;
crash(sleep_sec);
}