mirror of
https://github.com/isar/libmdbx.git
synced 2025-11-21 03:48:55 +08:00
mdbx-windows: refine assertion handling for debug builds.
This commit is contained in:
committed by
Леонид Юрьев (Leonid Yuriev)
parent
cfb9a55ebc
commit
aac890314c
5
mdbx.h
5
mdbx.h
@@ -1012,7 +1012,10 @@ MDBX_NORETURN LIBMDBX_API void mdbx_panic(const char *fmt, ...) MDBX_PRINTF_ARGS
|
|||||||
|
|
||||||
/** \brief Panics with asserton failed message and causes abnormal process
|
/** \brief Panics with asserton failed message and causes abnormal process
|
||||||
* termination. */
|
* termination. */
|
||||||
MDBX_NORETURN LIBMDBX_API void mdbx_assert_fail(const MDBX_env *env, const char *msg, const char *func, unsigned line);
|
#if !((defined(_WIN32) || defined(_WIN64)) && !MDBX_WITHOUT_MSVC_CRT)
|
||||||
|
MDBX_NORETURN
|
||||||
|
#endif /* MDBX_WITHOUT_MSVC_CRT */
|
||||||
|
LIBMDBX_API void mdbx_assert_fail(const MDBX_env *env, const char *msg, const char *func, unsigned line);
|
||||||
/** end of c_debug @} */
|
/** end of c_debug @} */
|
||||||
|
|
||||||
/** \brief Environment flags
|
/** \brief Environment flags
|
||||||
|
|||||||
@@ -86,7 +86,10 @@ MDBX_INTERNAL void debug_log_va(int level, const char *function, int line, const
|
|||||||
#if MDBX_DEBUG
|
#if MDBX_DEBUG
|
||||||
#define ASSERT_FAIL(env, msg, func, line) mdbx_assert_fail(env, msg, func, line)
|
#define ASSERT_FAIL(env, msg, func, line) mdbx_assert_fail(env, msg, func, line)
|
||||||
#else /* MDBX_DEBUG */
|
#else /* MDBX_DEBUG */
|
||||||
MDBX_NORETURN __cold void assert_fail(const char *msg, const char *func, unsigned line);
|
#if !((defined(_WIN32) || defined(_WIN64)) && defined(_DEBUG) && !MDBX_WITHOUT_MSVC_CRT)
|
||||||
|
MDBX_NORETURN
|
||||||
|
#endif
|
||||||
|
__cold void assert_fail(const char *msg, const char *func, unsigned line);
|
||||||
#define ASSERT_FAIL(env, msg, func, line) \
|
#define ASSERT_FAIL(env, msg, func, line) \
|
||||||
do { \
|
do { \
|
||||||
(void)(env); \
|
(void)(env); \
|
||||||
|
|||||||
18
src/osal.c
18
src/osal.c
@@ -205,7 +205,7 @@ __cold void mdbx_assert_fail(const MDBX_env *env, const char *msg, const char *f
|
|||||||
assert_fail(msg, func, line);
|
assert_fail(msg, func, line);
|
||||||
}
|
}
|
||||||
|
|
||||||
MDBX_NORETURN __cold void assert_fail(const char *msg, const char *func, unsigned line) {
|
__cold void assert_fail(const char *msg, const char *func, unsigned line) {
|
||||||
#endif /* MDBX_DEBUG */
|
#endif /* MDBX_DEBUG */
|
||||||
|
|
||||||
if (globals.logger.ptr)
|
if (globals.logger.ptr)
|
||||||
@@ -224,13 +224,19 @@ MDBX_NORETURN __cold void assert_fail(const char *msg, const char *func, unsigne
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
#if defined(_WIN32) || defined(_WIN64)
|
#if defined(_WIN32) || defined(_WIN64)
|
||||||
#if !MDBX_WITHOUT_MSVC_CRT && defined(_DEBUG)
|
#if defined(_DEBUG) && !MDBX_WITHOUT_MSVC_CRT
|
||||||
_CrtDbgReport(_CRT_ASSERT, func ? func : "unknown", line, "libmdbx", "assertion failed: %s", msg);
|
if (_CrtDbgReport(_CRT_ASSERT, func ? func : "unknown", line, "libmdbx", "assertion failed: %s", msg) == 0)
|
||||||
|
return /* user chooses the "Continue" button */;
|
||||||
|
else {
|
||||||
|
/* user chooses the "Retry" button */
|
||||||
|
if (IsDebuggerPresent())
|
||||||
|
DebugBreak();
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
if (IsDebuggerPresent())
|
if (IsDebuggerPresent())
|
||||||
DebugBreak();
|
DebugBreak();
|
||||||
#endif
|
|
||||||
FatalExit(STATUS_ASSERTION_FAILURE);
|
FatalExit(STATUS_ASSERTION_FAILURE);
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
abort();
|
abort();
|
||||||
#endif
|
#endif
|
||||||
@@ -252,14 +258,14 @@ __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)
|
#if defined(_DEBUG) && !MDBX_WITHOUT_MSVC_CRT
|
||||||
_CrtDbgReport(_CRT_ASSERT, "mdbx.c", 0, "libmdbx", "panic: %s", const_message);
|
_CrtDbgReport(_CRT_ASSERT, "mdbx.c", 0, "libmdbx", "panic: %s", const_message);
|
||||||
#else
|
#else
|
||||||
OutputDebugStringA("\r\nMDBX-PANIC: ");
|
OutputDebugStringA("\r\nMDBX-PANIC: ");
|
||||||
OutputDebugStringA(const_message);
|
OutputDebugStringA(const_message);
|
||||||
|
#endif
|
||||||
if (IsDebuggerPresent())
|
if (IsDebuggerPresent())
|
||||||
DebugBreak();
|
DebugBreak();
|
||||||
#endif
|
|
||||||
FatalExit(ERROR_UNHANDLED_ERROR);
|
FatalExit(ERROR_UNHANDLED_ERROR);
|
||||||
#else
|
#else
|
||||||
__assert_fail(const_message, "mdbx-panic", 0, const_message);
|
__assert_fail(const_message, "mdbx-panic", 0, const_message);
|
||||||
|
|||||||
Reference in New Issue
Block a user