From 6d852d9ff5f8c0aff2738019e72e07120d4f5659 Mon Sep 17 00:00:00 2001 From: Daan Date: Thu, 14 Apr 2022 13:51:32 -0700 Subject: [PATCH] fix trace on windows if symbol initialization fails --- src/options.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/options.c b/src/options.c index c490ad3e..23f5ac5b 100644 --- a/src/options.c +++ b/src/options.c @@ -419,16 +419,21 @@ void _mi_stack_trace_print(const char* msg, void** strace, size_t len, const mi_ info->MaxNameLen = 255; info->SizeOfStruct = sizeof(SYMBOL_INFO); HANDLE current_process = GetCurrentProcess(); - if (!SymInitialize(current_process, NULL, TRUE)) return; + bool initialized = (SymInitialize(current_process, NULL, TRUE) == TRUE); for (size_t i = 0; i < len && strace[i] != NULL; i++) { - if (SymFromAddr(current_process, (DWORD64)(strace[i]), 0, info)) { + if (!initialized) { + _mi_fprintf(NULL, NULL, " %2zu: %8p: \n", i, strace[i]); + } + else if (SymFromAddr(current_process, (DWORD64)(strace[i]), 0, info)) { _mi_fprintf(NULL, NULL, " %2zu: %8p: %s\n", i, strace[i], info->Name); } else { _mi_fprintf(NULL, NULL, " %2zu: %8p: \n", i, strace[i], GetLastError()); } } - SymCleanup(current_process); + if (initialized) { + SymCleanup(current_process); + } } } #elif (MI_DEBUG_TRACE > 0) && (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__))