Skip to content

Commit

Permalink
force dbghelp initialization after downloading symbols
Browse files Browse the repository at this point in the history
  • Loading branch information
kjk committed May 24, 2024
1 parent 6ea96fc commit efd31b9
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 34 deletions.
55 changes: 24 additions & 31 deletions src/CrashHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,11 @@ static bool DownloadAndUnzipSymbols(const char* symDir) {
return false;
}

if (!dir::CreateAll(symDir)) {
logf("CrashHandlerDownloadSymbols: couldn't create symbols dir '%s'\n", gSymbolsDir);
return false;
}

logf("DownloadAndUnzipSymbols: symDir: '%s', url: '%s'\n", symDir, gSymbolsUrl);
if (!symDir || !dir::Exists(symDir)) {
log("DownloadAndUnzipSymbols: exiting because symDir doesn't exist\n");
Expand All @@ -252,34 +257,36 @@ static bool DownloadAndUnzipSymbols(const char* symDir) {
return ok;
}

bool InitializeDbgHelp() {
bool CrashHandlerDownloadSymbols() {
return DownloadAndUnzipSymbols(gSymbolsDir);
}

bool InitializeDbgHelp(bool force) {
TempWStr ws = ToWStrTemp(gSymbolPath);
if (!dbghelp::Initialize(ws, false)) {
logf("InitializeDbgHelp: dbghelp::Initialize('%s') failed\n", gSymbolPath);
if (!dbghelp::Initialize(ws, force)) {
logf("InitializeDbgHelp: dbghelp::Initialize('%s'), force: %d failed\n", gSymbolPath, (int)force);
return false;
}

if (!dbghelp::HasSymbols()) {
log("InitializeDbgHelp(): dbghelp::HasSymbols() failed\n");
logf("InitializeDbgHelp(): dbghelp::HasSymbols(), force: %d failed\n", (int)force);
return false;
}
log("InitializeDbgHelp(): did initialize ok\n");
return true;
}

bool CrashHandlerDownloadSymbols() {
log("CrashHandlerDownloadSymbols()\n");

if (!dir::CreateAll(gSymbolsDir)) {
logf("CrashHandlerDownloadSymbols: couldn't create symbols dir '%s'\n", gSymbolsDir);
return false;
static bool DownloadSymbolsIfNeeded() {
log("DownloadSymbolsIfNeeded()\n");
bool ok = InitializeDbgHelp(false);
if (ok) {
return true;
}

if (!DownloadAndUnzipSymbols(gSymbolsDir)) {
log("CrashHandlerDownloadSymbols: failed to download symbols\n");
ok = CrashHandlerDownloadSymbols();
if (!ok) {
return false;
}
return true;
return InitializeDbgHelp(true);
}

// like crash report, but can be triggered without a crash
Expand Down Expand Up @@ -321,13 +328,7 @@ void _uploadDebugReport(const char* condStr, bool noCallstack) {
bool needsSymbols = !noCallstack;
if (needsSymbols) {
// we proceed even if we fail to download symbols
bool ok = InitializeDbgHelp();
if (!ok) {
ok = CrashHandlerDownloadSymbols();
if (ok) {
InitializeDbgHelp();
}
}
DownloadSymbolsIfNeeded();
}

auto s = BuildCrashInfoText(condStr, noCallstack);
Expand Down Expand Up @@ -355,16 +356,8 @@ void TryUploadCrashReport() {

logf("TryUploadCrashReport: gSymbolPathW: '%s'\n", gSymbolPath);

bool ok = InitializeDbgHelp();
if (ok) {
// we preceed even if we can't download symbols or initialize dbghelp
ok = CrashHandlerDownloadSymbols();
if (!ok) {
log("TryUploadCrashReport(): CrashHandlerDownloadSymbols() failed\n");
} else {
InitializeDbgHelp();
}
}
// we preceed even if we can't download symbols or initialize dbghelp
DownloadSymbolsIfNeeded();

char* sv = BuildCrashInfoText(nullptr, true);
if (str::IsEmpty(sv)) {
Expand Down
2 changes: 1 addition & 1 deletion src/CrashHandler.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ extern char* gSymbolsDir;
void InstallCrashHandler(const char* crashDumpPath, const char* crashFilePath, const char* symDir);
void UninstallCrashHandler();
bool CrashHandlerDownloadSymbols();
bool InitializeDbgHelp();
bool InitializeDbgHelp(bool force);
bool SetSymbolsDir(const char* symDir);
4 changes: 2 additions & 2 deletions src/SumatraPDF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4896,7 +4896,7 @@ void ClearHistory(MainWindow* win) {

static void DownloadDebugSymbols() {
TempStr msg = (TempStr) "Symbols were already downloaded";
bool ok = InitializeDbgHelp();
bool ok = InitializeDbgHelp(false);
if (ok) {
goto ShowMessage;
}
Expand All @@ -4907,7 +4907,7 @@ static void DownloadDebugSymbols() {
}
msg = str::FormatTemp("Downloaded symbols to %s", gSymbolsDir);
if (ok) {
bool didInitializeDbgHelp = InitializeDbgHelp();
bool didInitializeDbgHelp = InitializeDbgHelp(true);
ReportIfQuick(!didInitializeDbgHelp);
}
ShowMessage:
Expand Down

0 comments on commit efd31b9

Please sign in to comment.