Search
💂

Google Crashpad + Sentry + jenkins

Windows Minidump 관리를 용이하게 하기 위해서 Google Crashpad와 Sentry, 그리고 Jenkins를 함께 이용한다.

Crashpad

설치
conanfile.txt에 sentry-crashpad/0.4.17 추가
crashpad_handler.exe는 별도 다운로드 필요
BugSplat에서 관련 파일 다운로드
Crashpad - BugSplat의 download링크 클릭 (아래 URL이 현재 다운로드 가능 URL이지만 언제 바뀔지 알 수 없음 )
사용방법
CrashPad 활성화
#include <filesystem> #pragma warning(push) #pragma warning(disable:4819) #pragma warning(disable:4100) #include "client/crashpad_client.h" #include "client/settings.h" #include "client/crash_report_database.h" #pragma warning(pop) #define DUMP_FOLDER L"minidump" bool start_crashpad() { const wstring directory_name(DUMP_FOLDER); std::filesystem::create_directory(directory_name); // Cache directory that will store crashpad information and minidumps base::FilePath database(DUMP_FOLDER); // Path to the out-of-process handler executable #ifdef _DEBUG base::FilePath handler(L".\\crashpad\\Debug_x64\\MDd\\crashpad_handler.exe"); #else base::FilePath handler(L".\\crashpad\\Release_x64\\MD\\crashpad_handler.exe"); #endif // URL used to submit minidumps to std::string url("https://xxxxxxx.ingest.sentry.io/api/xxxxxxx/minidump/?sentry_key=0000000000000000000"); // Optional annotations passed via --annotations to the handler std::map<string, string> annotations; // Optional arguments to pass to the handler std::vector<string> arguments; arguments.push_back("--no-rate-limit"); crashpad::CrashpadClient client; bool success = client.StartHandler( handler, database, database, url, annotations, arguments, /* restartable */ true, /* asynchronous_start */ false ); return success; }
C++
복사
LINE 9, 11, 13은 설정에 따라서 바꿔서 사용
위의 설정을 하게 되면 DUMP_FOLDER 안에 아래 그림과 같은 구조로 폴더가 생성되며 오류가 났을 때 reports 폴더 안에 Dump파일이 생성된다.

Sentry

Dump 관리 프로그램
사용방법
const base::FilePath database(DUMP_FOLDER); const std::unique_ptr<crashpad::CrashReportDatabase> db = crashpad::CrashReportDatabase::Initialize(database); if (db != nullptr && db->GetSettings() != nullptr) { db->GetSettings()->SetUploadsEnabled(true); }
C++
복사
Crashpad에서 에러가 발생하면 Sentry로 자동 업로드를 해 준다.
정상적으로 업로드가 되지 않을 경우 Crashpad를 설정할 때 arguments.push_back("--no-rate-limit"); 가 추가되어 있는지 확인
Dump 업로드는 crashpad_handler.exe가 진행.

Jenkins

1.
빌드 PC에 Sentry Cli 설치
Scoop Install
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time irm get.scoop.sh | iex
PowerShell
복사
scoop를 이용한 Sentry Cli 설치
scoop install sentry-cli
PowerShell
복사
2.
빌드 PC에서 Sentry-cli를 이용하여 로그인
sentry-cli login
PowerShell
복사
로그인을 시도하면 웹페이지로 연결되며 SECURITY KEY를 발급해준다
발급된 SECURITY KEY를 콘솔에 복사하여 입력하면 완료
3.
jenkins에 windows command Excute 등록
sentry-cli releases new -o cylee -p minidump %SVN_REVISION% sentry-cli upload-dif -o cylee -p minidump %JENKINS_HOME%\test_client.exe %JENKINS_HOME%\test_client.pdb sentry-cli upload-dif -o cylee --project minidump --include-sources %WORKSPACE% sentry-cli releases deploys %SVN_REVISION% new -e alpha
PowerShell
복사
위의 설정을 이용하면 빌드가 완료된 뒤에 SVN_REVISION 번호를 release version으로 사용하여 pdb파일과 exe파일을 업로드 해 준다.

기타

Sentry에 PDB / EXE 직접 업로드
sentry-cli upload-dif -o cylee -p minidump test_client.exe test_client.pdb
PowerShell
복사