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
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
복사