[Bf-blender-cvs] [76e56e2ba70] master: Windows: Ignore context record for backtrace is address is 0.

Ray Molenkamp noreply at git.blender.org
Sun May 10 02:12:21 CEST 2020


Commit: 76e56e2ba70f4535da70b3e55d4b18ac3cd19820
Author: Ray Molenkamp
Date:   Sat May 9 18:12:14 2020 -0600
Branches: master
https://developer.blender.org/rB76e56e2ba70f4535da70b3e55d4b18ac3cd19820

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.

===================================================================

M	source/blender/blenlib/intern/system_win32.c

===================================================================

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);
 }



More information about the Bf-blender-cvs mailing list