mdbx-windows: использование _CrtDbgReport() в отладочных сборках.

This commit is contained in:
Леонид Юрьев (Leonid Yuriev) 2022-10-09 00:16:40 +03:00
parent ad09164604
commit 14eda2cd17

View File

@ -20,6 +20,10 @@
#include <winioctl.h> #include <winioctl.h>
#if !MDBX_WITHOUT_MSVC_CRT && defined(_DEBUG)
#include <crtdbg.h>
#endif
static int waitstatus2errcode(DWORD result) { static int waitstatus2errcode(DWORD result) {
switch (result) { switch (result) {
case WAIT_OBJECT_0: case WAIT_OBJECT_0:
@ -252,9 +256,14 @@ MDBX_NORETURN __cold void assert_fail(const char *msg, const char *func,
while (1) { while (1) {
#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)
#if !MDBX_WITHOUT_MSVC_CRT && defined(_DEBUG)
_CrtDbgReport(_CRT_ASSERT, func ? func : "unknown", line, "libmdbx",
"assertion failed: %s", msg);
#else
if (IsDebuggerPresent()) if (IsDebuggerPresent())
DebugBreak(); DebugBreak();
FatalExit(ERROR_UNHANDLED_ERROR); #endif
FatalExit(STATUS_ASSERTION_FAILURE);
#else #else
abort(); abort();
#endif #endif
@ -278,10 +287,15 @@ __cold void mdbx_panic(const char *fmt, ...) {
while (1) { while (1) {
#if defined(_WIN32) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN64)
#if !MDBX_WITHOUT_MSVC_CRT && defined(_DEBUG)
_CrtDbgReport(_CRT_ASSERT, "mdbx.c", 0, "libmdbx", "panic: %s",
const_message);
#else
OutputDebugStringA("\r\nMDBX-PANIC: "); OutputDebugStringA("\r\nMDBX-PANIC: ");
OutputDebugStringA(const_message); OutputDebugStringA(const_message);
if (IsDebuggerPresent()) if (IsDebuggerPresent())
DebugBreak(); DebugBreak();
#endif
FatalExit(ERROR_UNHANDLED_ERROR); FatalExit(ERROR_UNHANDLED_ERROR);
#else #else
__assert_fail(const_message, "mdbx", 0, "panic"); __assert_fail(const_message, "mdbx", 0, "panic");