fix trace on windows if symbol initialization fails

This commit is contained in:
Daan 2022-04-14 13:51:32 -07:00
parent 1270eec6c0
commit 6d852d9ff5

View file

@ -419,18 +419,23 @@ void _mi_stack_trace_print(const char* msg, void** strace, size_t len, const mi_
info->MaxNameLen = 255; info->MaxNameLen = 255;
info->SizeOfStruct = sizeof(SYMBOL_INFO); info->SizeOfStruct = sizeof(SYMBOL_INFO);
HANDLE current_process = GetCurrentProcess(); 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++) { 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: <unknown address>\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); _mi_fprintf(NULL, NULL, " %2zu: %8p: %s\n", i, strace[i], info->Name);
} }
else { else {
_mi_fprintf(NULL, NULL, " %2zu: %8p: <unknown address: error: 0x%04x>\n", i, strace[i], GetLastError()); _mi_fprintf(NULL, NULL, " %2zu: %8p: <unknown address: error: 0x%04x>\n", i, strace[i], GetLastError());
} }
} }
if (initialized) {
SymCleanup(current_process); SymCleanup(current_process);
} }
} }
}
#elif (MI_DEBUG_TRACE > 0) && (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__)) #elif (MI_DEBUG_TRACE > 0) && (defined(__linux__) || defined(__FreeBSD__) || defined(__APPLE__))
#include <execinfo.h> #include <execinfo.h>
#define MI_MAX_TRACE_LEN (64) #define MI_MAX_TRACE_LEN (64)