From 09b5d2f5ddba3c8f81257f0f647265ecb2433581 Mon Sep 17 00:00:00 2001 From: Jeffrey Walton Date: Mon, 3 Aug 2015 19:17:42 -0400 Subject: [PATCH] Switched to DebugBreak() for Windows machines to snap the debugger and allow a continue --- trap.h | 60 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 15 deletions(-) diff --git a/trap.h b/trap.h index 436c024a..63985840 100644 --- a/trap.h +++ b/trap.h @@ -4,26 +4,40 @@ #ifndef CRYPTOPP_TRAP_H #define CRYPTOPP_TRAP_H -#ifndef NDEBUG -#ifdef CRYPTOPP_UNIX_AVAILABLE -# include -# include -# include -#endif // CRYPTOPP_UNIX_AVAILABLE -#endif // NDEBUG +#include "config.h" +// CRYPTOPP_POSIX_ASSERT unconditionally disables the library assert and yields +// to Posix assert. CRYPTOPP_POSIX_ASSERT can be set in config.h. if you want +// to disable asserts, then define NDEBUG or _NDEBUG when building the library. + +// Needed for NDEBUG and CRYPTOPP_POSIX_ASSERT #include +#if defined(CRYPTOPP_DEBUG) +# include +# include +# if defined(CRYPTOPP_WIN32_AVAILABLE) +# pragma push_macro("WIN32_LEAN_AND_MEAN") +# pragma push_macro("_WIN32_WINNT") +# pragma push_macro("NOMINMAX") +# define WIN32_LEAN_AND_MEAN +# define _WIN32_WINNT 0x0400 +# define NOMINMAX +# include +# elif defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE) +# include +# endif +#endif // CRYPTOPP_DEBUG + // ************** run-time assertion *************** -// See test.cpp and DebugTrapHandler for code to install a NULL -// signal handler for SIGTRAP. The handler installs itself during +// See test.cpp and DebugTrapHandler for code to install a null signal handler +// for SIGTRAP on BSD, Linux and Unix. The handler installs itself during // initialization of the test program. -// Linux and Unix -#if !defined(NDEBUG) && defined(CRYPTOPP_UNIX_AVAILABLE) +#if defined(CRYPTOPP_DEBUG) && (defined(CRYPTOPP_BSD_AVAILABLE) || defined(CRYPTOPP_UNIX_AVAILABLE)) # define CRYPTOPP_ASSERT(exp) { \ - if (!(exp)) { \ + if (!(exp)) { \ std::ostringstream oss; \ oss << "Assertion failed: " << (char*)(__FILE__) << "(" \ << (int)(__LINE__) << "): " << (char*)(__func__) \ @@ -32,10 +46,26 @@ raise(SIGTRAP); \ } \ } -// Fallback to original behavior (including for NDEBUG) +#elif defined(CRYPTOPP_DEBUG) && defined(CRYPTOPP_WIN32_AVAILABLE) +# define CRYPTOPP_ASSERT(exp) { \ + if (!(exp)) { \ + std::ostringstream oss; \ + oss << "Assertion failed: " << (char*)(__FILE__) << "(" \ + << (int)(__LINE__) << "): " << (char*)(__FUNCTION__) \ + << std::endl; \ + DebugBreak(); \ + std::cerr << oss.str(); \ + } \ + } +// Fallback to original behavior for NDEBUG (and non-Windows/non-Unix builds) #else # define CRYPTOPP_ASSERT(exp) assert(exp) -#endif // DEBUG and CRYPTOPP_UNIX_AVAILABLE +#endif // DEBUG and Unix or Windows + +#if defined(CRYPTOPP_DEBUG) && defined(CRYPTOPP_WIN32_AVAILABLE) +# pragma pop_macro("WIN32_LEAN_AND_MEAN") +# pragma pop_macro("_WIN32_WINNT") +# pragma pop_macro("NOMINMAX") +#endif #endif // CRYPTOPP_TRAP_H -