From 76e56e2ba70f4535da70b3e55d4b18ac3cd19820 Mon Sep 17 00:00:00 2001 From: Ray Molenkamp Date: Sat, 9 May 2020 18:12:14 -0600 Subject: Windows: Ignore context record for backtrace is address is 0. T76602 reported a crash with the exception address being 0, this stack naturally could not be walked and no backtrace was reported for the main thread. Which would have been helpful. This change modifies the behaviour of the crash handler to ignore the context record if it contains no useful information and walk the current stack to get some information about what lead to the crash. --- source/blender/blenlib/intern/system_win32.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'source/blender/blenlib') diff --git a/source/blender/blenlib/intern/system_win32.c b/source/blender/blenlib/intern/system_win32.c index 203c9673a9e..d60f54ebe67 100644 --- a/source/blender/blenlib/intern/system_win32.c +++ b/source/blender/blenlib/intern/system_win32.c @@ -307,13 +307,14 @@ static bool BLI_windows_system_backtrace_stack(FILE *fp) { fprintf(fp, "Stack trace:\n"); /* If we are handling an exception use the context record from that. */ - if (current_exception) { + if (current_exception && current_exception->ExceptionRecord->ExceptionAddress) { /* The back trace code will write to the context record, to protect the original record from * modifications give the backtrace a copy to work on. */ CONTEXT TempContext = *current_exception->ContextRecord; return BLI_windows_system_backtrace_run_trace(fp, GetCurrentThread(), &TempContext); } else { + /* If there is no current exception or the address is not set, walk the current stack. */ return bli_windows_system_backtrace_stack_thread(fp, GetCurrentThread()); } } @@ -403,6 +404,7 @@ void BLI_windows_handle_exception(EXCEPTION_POINTERS *exception) CHAR modulename[MAX_PATH]; bli_windows_get_module_name(address, modulename, sizeof(modulename)); fprintf(stderr, "Module : %s\n", modulename); + fprintf(stderr, "Thread : %.8x\n", GetCurrentThreadId()); } fflush(stderr); } -- cgit v1.2.3