Enable MSVC assert report box [Abort|Retry|Ignore] if a debugger is present (#5279)
authorVladimir Glavnyy <31897320+vglavnyy@users.noreply.github.com>
Mon, 8 Apr 2019 17:01:41 +0000 (00:01 +0700)
committerWouter van Oortmerssen <aardappel@gmail.com>
Mon, 8 Apr 2019 17:01:41 +0000 (10:01 -0700)
tests/test_assert.cpp

index 804663c..ccbce23 100644 (file)
@@ -4,6 +4,7 @@
 
 #ifdef _MSC_VER
 #  include <crtdbg.h>
+#  include <windows.h>
 #endif
 
 int testing_fails = 0;
@@ -43,15 +44,19 @@ void InitTestEngine(TestFailEventListener listener) {
   // clang-format off
 
   #ifdef _MSC_VER
-    // Send all reports to STDOUT.
+    // By default, send all reports to STDOUT to prevent CI hangs.
+    // Enable assert report box [Abort|Retry|Ignore] if a debugger is present.
+    const int dbg_mode = (_CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG) |
+                         (IsDebuggerPresent() ? _CRTDBG_MODE_WNDW : 0);
+    (void)dbg_mode; // release mode fix
     // CrtDebug reports to _CRT_WARN channel.
-    _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+    _CrtSetReportMode(_CRT_WARN, dbg_mode);
     _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT);
     // The assert from <assert.h> reports to _CRT_ERROR channel
-    _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+    _CrtSetReportMode(_CRT_ERROR, dbg_mode);
     _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDOUT);
     // Internal CRT assert channel?
-    _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+    _CrtSetReportMode(_CRT_ASSERT, dbg_mode);
     _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDOUT);
   #endif