public inbox for [email protected]
help / color / mirror / Atom feedFrom: Andres Freund <[email protected]>
Subject: [PATCH v4 2/2] windows: Improve crash / assert / exception handling.
Date: Thu, 9 Sep 2021 17:49:39 -0700
---
src/backend/main/main.c | 45 +++++++++++++++++++++++++++++++++++++++--
.cirrus.yml | 6 ++++++
2 files changed, 49 insertions(+), 2 deletions(-)
diff --git a/src/backend/main/main.c b/src/backend/main/main.c
index ad84a45e28c..5115ad91898 100644
--- a/src/backend/main/main.c
+++ b/src/backend/main/main.c
@@ -26,6 +26,10 @@
#include <sys/param.h>
#endif
+#if defined(WIN32)
+#include <crtdbg.h>
+#endif
+
#if defined(_M_AMD64) && _MSC_VER == 1800
#include <math.h>
#include <versionhelpers.h>
@@ -237,8 +241,45 @@ startup_hacks(const char *progname)
exit(1);
}
- /* In case of general protection fault, don't show GUI popup box */
- SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX);
+ /*
+ * SEM_FAILCRITICALERRORS causes more errors to be reported to
+ * callers.
+ *
+ * We used to also specify SEM_NOGPFAULTERRORBOX, but that prevents
+ * windows crash reporting from working. Which includes registered
+ * just-in-time debuggers. Now we try to disable sources of popups
+ * separately below (note that SEM_NOGPFAULTERRORBOX didn't actually
+ * prevent several sources of popups).
+ */
+ SetErrorMode(SEM_FAILCRITICALERRORS);
+
+ /*
+ * Show errors on stderr instead of popup box (note this doesn't
+ * affect errors originating in the C runtime, see below).
+ */
+ _set_error_mode(_OUT_TO_STDERR);
+
+
+ /*
+ * By default abort() only generates a crash-dump in *non* debug
+ * builds. As our Assert() / ExceptionalCondition() uses abort(),
+ * leaving the default in place would make debugging harder.
+ */
+#ifndef __MINGW64__
+ _set_abort_behavior(_CALL_REPORTFAULT | _WRITE_ABORT_MSG,
+ _CALL_REPORTFAULT | _WRITE_ABORT_MSG);
+#endif
+
+ /*
+ * In case of errors (including assertions) on the C runtime level,
+ * report them to stderr (and the debugger) instead of displaying a
+ * popup. This is C runtime specific and thus the above incantations
+ * aren't sufficient to suppress these popups.
+ */
+ _CrtSetReportMode(_CRT_ASSERT, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG);
+ _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR);
+ _CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR);
#if defined(_M_AMD64) && _MSC_VER == 1800
diff --git a/.cirrus.yml b/.cirrus.yml
index 4116e0155dc..3ffb3f3d67f 100644
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@ -415,6 +415,12 @@ task:
- cd src/tools/msvc
- perl vcregress.pl ecpgcheck
+ always:
+ cores_script: cat crashlog.txt || true
+ dump_artifacts:
+ path: "crashlog.txt"
+ type: text/plain
+
on_failure: *on_failure
--
2.34.0
--mezqkkzp3cvymuis--
view thread (9+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH v4 2/2] windows: Improve crash / assert / exception handling.
In-Reply-To: <no-message-id-1860804@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox