Define wxDEBUG_LEVEL in both debug and release builds as 1.
By default include assertions and debug logging in both debug and release builds but disable them in application release builds (when NDEBUG is defined). Also update (more accurately, replace) debugging overview. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61886 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -22,12 +22,12 @@
|
||||
#include "wx/cmdargs.h" // for wxCmdLineArgsArray used by wxApp::argv
|
||||
#include "wx/init.h" // we must declare wxEntry()
|
||||
#include "wx/intl.h" // for wxLayoutDirection
|
||||
#include "wx/log.h" // for wxDISABLE_DEBUG_LOGGING_IN_RELEASE_BUILD()
|
||||
|
||||
class WXDLLIMPEXP_FWD_BASE wxAppConsole;
|
||||
class WXDLLIMPEXP_FWD_BASE wxAppTraits;
|
||||
class WXDLLIMPEXP_FWD_BASE wxCmdLineParser;
|
||||
class WXDLLIMPEXP_FWD_BASE wxEventLoopBase;
|
||||
class WXDLLIMPEXP_FWD_BASE wxLog;
|
||||
class WXDLLIMPEXP_FWD_BASE wxMessageOutput;
|
||||
|
||||
#if wxUSE_GUI
|
||||
@@ -35,6 +35,11 @@ class WXDLLIMPEXP_FWD_BASE wxMessageOutput;
|
||||
class WXDLLIMPEXP_FWD_CORE wxWindow;
|
||||
#endif
|
||||
|
||||
// this macro should be used in any main() or equivalent functions defined in wx
|
||||
#define wxDISABLE_DEBUG_SUPPORT() \
|
||||
wxDISABLE_ASSERTS_IN_RELEASE_BUILD(); \
|
||||
wxDISABLE_DEBUG_LOGGING_IN_RELEASE_BUILD()
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// typedefs
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -772,8 +777,13 @@ public:
|
||||
// your compiler really, really wants main() to be in your main program (e.g.
|
||||
// hello.cpp). Now IMPLEMENT_APP should add this code if required.
|
||||
|
||||
#define IMPLEMENT_WXWIN_MAIN_CONSOLE \
|
||||
int main(int argc, char **argv) { return wxEntry(argc, argv); }
|
||||
#define IMPLEMENT_WXWIN_MAIN_CONSOLE \
|
||||
int main(int argc, char **argv) \
|
||||
{ \
|
||||
wxDISABLE_DEBUG_SUPPORT(); \
|
||||
\
|
||||
return wxEntry(argc, argv); \
|
||||
}
|
||||
|
||||
// port-specific header could have defined it already in some special way
|
||||
#ifndef IMPLEMENT_WXWIN_MAIN
|
||||
|
@@ -15,7 +15,7 @@
|
||||
#include "wx/version.h"
|
||||
|
||||
// NB: This file contains macros for checking binary compatibility of libraries
|
||||
// in multilib buildm, plugins and user components.
|
||||
// in multilib builds, plugins and user components.
|
||||
// The WX_BUILD_OPTIONS_SIGNATURE macro expands into string that should
|
||||
// uniquely identify binary compatible builds: i.e. if two builds of the
|
||||
// library are binary compatible, their signature string should be the
|
||||
@@ -42,12 +42,6 @@
|
||||
__WX_BO_STRINGIZE(x) "." __WX_BO_STRINGIZE(y) "." __WX_BO_STRINGIZE(z)
|
||||
#endif
|
||||
|
||||
#ifdef __WXDEBUG__
|
||||
#define __WX_BO_DEBUG "debug"
|
||||
#else
|
||||
#define __WX_BO_DEBUG "no debug"
|
||||
#endif
|
||||
|
||||
#if wxUSE_UNICODE_UTF8
|
||||
#define __WX_BO_UNICODE "UTF-8"
|
||||
#elif wxUSE_UNICODE_WCHAR
|
||||
@@ -100,7 +94,7 @@
|
||||
// This macro is passed as argument to wxConsoleApp::CheckBuildOptions()
|
||||
#define WX_BUILD_OPTIONS_SIGNATURE \
|
||||
__WX_BO_VERSION(wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER) \
|
||||
" (" __WX_BO_DEBUG "," __WX_BO_UNICODE \
|
||||
" (" __WX_BO_UNICODE \
|
||||
__WX_BO_COMPILER \
|
||||
__WX_BO_STL \
|
||||
__WX_BO_WXWIN_COMPAT_2_6 __WX_BO_WXWIN_COMPAT_2_8 \
|
||||
|
@@ -37,28 +37,29 @@ class WXDLLIMPEXP_FWD_BASE wxCStrData;
|
||||
2: Maximal (at least for now): asserts which are "expensive"
|
||||
(performance-wise) or only make sense for finding errors in wxWidgets
|
||||
itself, as opposed to bugs in applications using it, are also enabled.
|
||||
|
||||
For compatibility reasons, currently wxDEBUG_LEVEL is defined if
|
||||
__WXDEBUG__ is defined but in the near future (2.9.1) the role of the flags
|
||||
will change and wxDEBUG_LEVEL will be the primary value with __WXDEBUG__
|
||||
only used for compatibility.
|
||||
*/
|
||||
|
||||
// if _DEBUG is defined (MS VC++ and others use it in debug builds), define
|
||||
// __WXDEBUG__ too
|
||||
#ifdef _DEBUG
|
||||
// unless wxDEBUG_LEVEL is predefined (by configure or via wx/setup.h under
|
||||
// Windows), use the default
|
||||
#if !defined(wxDEBUG_LEVEL)
|
||||
#define wxDEBUG_LEVEL 1
|
||||
#endif // !defined(wxDEBUG_LEVEL)
|
||||
|
||||
/*
|
||||
__WXDEBUG__ is defined when wxDEBUG_LEVEL != 0. This is done mostly for
|
||||
compatibility but it also provides a simpler way to check if asserts and
|
||||
debug logging is enabled at all.
|
||||
*/
|
||||
#if wxDEBUG_LEVEL > 0
|
||||
#ifndef __WXDEBUG__
|
||||
#define __WXDEBUG__
|
||||
#endif // !__WXDEBUG__
|
||||
#endif // _DEBUG
|
||||
|
||||
// if NDEBUG is defined (<assert.h> uses it), undef __WXDEBUG__ and WXDEBUG
|
||||
#ifdef NDEBUG
|
||||
#endif
|
||||
#else
|
||||
#undef __WXDEBUG__
|
||||
#undef WXDEBUG
|
||||
#endif // NDEBUG
|
||||
#endif
|
||||
|
||||
// if __WXDEBUG__ is defined, make sure that WXDEBUG is defined and >= 1
|
||||
// Finally there is also a very old WXDEBUG macro not used anywhere at all, it
|
||||
// is only defined for compatibility.
|
||||
#ifdef __WXDEBUG__
|
||||
#if !defined(WXDEBUG) || !WXDEBUG
|
||||
#undef WXDEBUG
|
||||
@@ -66,15 +67,6 @@ class WXDLLIMPEXP_FWD_BASE wxCStrData;
|
||||
#endif // !WXDEBUG
|
||||
#endif // __WXDEBUG__
|
||||
|
||||
// temporarily define wxDEBUG_LEVEL as function of __WXDEBUG__
|
||||
#if !defined(wxDEBUG_LEVEL)
|
||||
#ifdef __WXDEBUG__
|
||||
#define wxDEBUG_LEVEL 1
|
||||
#else
|
||||
#define wxDEBUG_LEVEL 0
|
||||
#endif
|
||||
#endif // !defined(wxDEBUG_LEVEL)
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Handling assertion failures
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -126,6 +118,14 @@ inline wxAssertHandler_t wxSetAssertHandler(wxAssertHandler_t handler)
|
||||
return old;
|
||||
}
|
||||
|
||||
/*
|
||||
Reset the default assert handler.
|
||||
|
||||
This may be used to enable asserts, which are disabled by default in this
|
||||
case, for programs built in release build (NDEBUG defined).
|
||||
*/
|
||||
extern void WXDLLIMPEXP_BASE wxSetDefaultAssertHandler();
|
||||
|
||||
#else // !wxDEBUG_LEVEL
|
||||
|
||||
// provide empty stubs in case assertions are completely disabled
|
||||
@@ -137,11 +137,26 @@ inline wxAssertHandler_t wxSetAssertHandler(wxAssertHandler_t /* handler */)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
inline void wxSetDefaultAssertHandler() { }
|
||||
|
||||
#endif // wxDEBUG_LEVEL/!wxDEBUG_LEVEL
|
||||
|
||||
// simply a synonym for wxSetAssertHandler(NULL)
|
||||
inline void wxDisableAsserts() { wxSetAssertHandler(NULL); }
|
||||
|
||||
/*
|
||||
A macro which disables asserts for applications compiled in release build.
|
||||
|
||||
By default, IMPLEMENT_APP (or rather IMPLEMENT_WXWIN_MAIN) disable the
|
||||
asserts in the applications compiled in the release build by calling this.
|
||||
It does nothing if NDEBUG is not defined.
|
||||
*/
|
||||
#ifdef NDEBUG
|
||||
#define wxDISABLE_ASSERTS_IN_RELEASE_BUILD() wxDisableAsserts()
|
||||
#else
|
||||
#define wxDISABLE_ASSERTS_IN_RELEASE_BUILD()
|
||||
#endif
|
||||
|
||||
#if wxDEBUG_LEVEL
|
||||
|
||||
/*
|
||||
|
@@ -1573,5 +1573,14 @@ wxSafeShowMessage(const wxString& title, const wxString& text);
|
||||
#undef WX_WATCOM_ONLY_CODE
|
||||
#endif
|
||||
|
||||
// macro which disables debug logging in release builds: this is done by
|
||||
// default by IMPLEMENT_APP() so usually it doesn't need to be used explicitly
|
||||
#ifdef NDEBUG
|
||||
#define wxDISABLE_DEBUG_LOGGING_IN_RELEASE_BUILD() \
|
||||
wxLog::SetLogLevel(wxLOG_Info)
|
||||
#else // !NDEBUG
|
||||
#define wxDISABLE_DEBUG_LOGGING_IN_RELEASE_BUILD()
|
||||
#endif // NDEBUG/!NDEBUG
|
||||
|
||||
#endif // _WX_LOG_H_
|
||||
|
||||
|
@@ -174,6 +174,8 @@ extern WXDLLIMPEXP_CORE int
|
||||
wchar_t * WXUNUSED(lpCmdLine), \
|
||||
int nCmdShow) \
|
||||
{ \
|
||||
wxDISABLE_DEBUG_SUPPORT(); \
|
||||
\
|
||||
/* NB: wxEntry expects lpCmdLine argument to be char*, not */ \
|
||||
/* wchar_t*, but fortunately it's not used anywhere */ \
|
||||
/* and we can simply pass NULL in: */ \
|
||||
@@ -189,6 +191,8 @@ extern WXDLLIMPEXP_CORE int
|
||||
wxCmdLineArgType WXUNUSED(lpCmdLine), \
|
||||
int nCmdShow) \
|
||||
{ \
|
||||
wxDISABLE_DEBUG_SUPPORT(); \
|
||||
\
|
||||
/* NB: We pass NULL in place of lpCmdLine to behave the same as */ \
|
||||
/* Borland-specific wWinMain() above. If it becomes needed */ \
|
||||
/* to pass lpCmdLine to wxEntry() here, you'll have to fix */ \
|
||||
|
Reference in New Issue
Block a user