diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2016-03-23 13:44:14 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2016-03-23 13:44:14 (GMT) |
commit | 412a5e7e2349689ab408c9475401c83886108e75 (patch) | |
tree | a0be3cf75dd62a62ac7574c16ff585f139aef0d7 | |
parent | b9e0834f468b9c6c0fa1f2758971a3182e3cd863 (diff) | |
download | cpython-412a5e7e2349689ab408c9475401c83886108e75.zip cpython-412a5e7e2349689ab408c9475401c83886108e75.tar.gz cpython-412a5e7e2349689ab408c9475401c83886108e75.tar.bz2 |
faulthandler: only log fatal exceptions
Issue #23848, #26622:
* faulthandler now only logs fatal Windows exceptions.
* write error code as decimal, not as hexadecimal
* replace "Windows exception" with "Windows fatal exception"
-rw-r--r-- | Lib/test/test_faulthandler.py | 2 | ||||
-rw-r--r-- | Modules/faulthandler.c | 13 |
2 files changed, 11 insertions, 4 deletions
diff --git a/Lib/test/test_faulthandler.py b/Lib/test/test_faulthandler.py index fbd535b..a3a2116 100644 --- a/Lib/test/test_faulthandler.py +++ b/Lib/test/test_faulthandler.py @@ -115,7 +115,7 @@ class FaultHandlerTests(unittest.TestCase): self.check_error(code, line_number, fatal_error, **kw) def check_windows_exception(self, code, line_number, name_regex, **kw): - fatal_error = 'Windows exception: %s' % name_regex + fatal_error = 'Windows fatal exception: %s' % name_regex self.check_error(code, line_number, fatal_error, **kw) @unittest.skipIf(sys.platform.startswith('aix'), diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 2214466..e86f2bb 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -367,8 +367,15 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) { const int fd = fatal_error.fd; DWORD code = exc_info->ExceptionRecord->ExceptionCode; + DWORD flags = exc_info->ExceptionRecord->ExceptionFlags; - PUTS(fd, "Windows exception: "); + /* only log fatal exceptions */ + if (flags & EXCEPTION_NONCONTINUABLE) { + /* call the next exception handler */ + return EXCEPTION_CONTINUE_SEARCH; + } + + PUTS(fd, "Windows fatal exception: "); switch (code) { /* only format most common errors */ @@ -380,8 +387,8 @@ faulthandler_exc_handler(struct _EXCEPTION_POINTERS *exc_info) case EXCEPTION_IN_PAGE_ERROR: PUTS(fd, "page error"); break; case EXCEPTION_STACK_OVERFLOW: PUTS(fd, "stack overflow"); break; default: - PUTS(fd, "code 0x"); - _Py_DumpHexadecimal(fd, code, sizeof(DWORD)); + PUTS(fd, "code "); + _Py_DumpDecimal(fd, code, sizeof(DWORD)); } PUTS(fd, "\n\n"); |