| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/debug.h
- // Purpose: interface of global functions
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /** @addtogroup group_funcmacro_debug */
- //@{
- /**
- Exits the program immediately.
- This is a simple wrapper for the standard abort() function which is not
- available under all platforms (currently only Windows CE doesn't provide
- it).
- @since 2.9.4
- */
- void wxAbort();
- /**
- @def wxDEBUG_LEVEL
- Preprocessor symbol defining the level of debug support available.
- This symbol is defined to 1 by default meaning that asserts are compiled in
- (although they may be disabled by a call to wxDisableAsserts()). You may
- predefine it as 0 prior to including any wxWidgets headers to omit the
- calls to wxASSERT() and related macros entirely in your own code and you
- may also predefine it as 0 when building wxWidgets to also avoid including
- any asserts in wxWidgets itself.
- Alternatively, you may predefine it as 2 to include wxASSERT_LEVEL_2() and
- similar macros which are used for asserts which have non-trivial run-time
- costs and so are disabled by default.
- @since 2.9.1
- @header{wx/debug.h}
- */
- #define wxDEBUG_LEVEL
- /**
- @def __WXDEBUG__
- Compatibility macro indicating presence of debug support.
- This symbol is defined if wxDEBUG_LEVEL is greater than 0 and undefined
- otherwise.
- @header{wx/debug.h}
- */
- #define __WXDEBUG__
- /**
- Type for the function called in case of assert failure.
- @see wxSetAssertHandler()
- */
- typedef void (*wxAssertHandler_t)(const wxString& file,
- int line,
- const wxString& func,
- const wxString& cond,
- const wxString& msg);
- /**
- Assert macro. An error message will be generated if the condition is @false in
- debug mode, but nothing will be done in the release build.
- Please note that the condition in wxASSERT() should have no side effects
- because it will not be executed in release mode at all.
- This macro should be used to catch (in debug builds) logical errors done
- by the programmer.
- @see wxASSERT_MSG(), wxCOMPILE_TIME_ASSERT()
- @header{wx/debug.h}
- */
- #define wxASSERT( condition )
- /**
- Assert macro for expensive run-time checks.
- This macro does nothing unless wxDEBUG_LEVEL is 2 or more and is meant to
- be used for the assertions with noticeable performance impact and which,
- hence, should be disabled during run-time.
- If wxDEBUG_LEVEL is 2 or more, it becomes the same as wxASSERT().
- @header{wx/debug.h}
- */
- #define wxASSERT_LEVEL_2( condition )
- /**
- Assert macro with a custom message for expensive run-time checks.
- If wxDEBUG_LEVEL is 2 or more, this is the same as wxASSERT_MSG(),
- otherwise it doesn't do anything at all.
- @see wxASSERT_LEVEL_2()
- @header{wx/debug.h}
- */
- #define wxASSERT_LEVEL_2_MSG( condition, msg)
- /**
- This macro results in a @ref wxCOMPILE_TIME_ASSERT "compile time assertion failure"
- if the size of the given @c type is less than @c size bits.
- This macro should be used to catch (in debug builds) logical errors done
- by the programmer.
- You may use it like this, for example:
- @code
- // we rely on the int being able to hold values up to 2^32
- wxASSERT_MIN_BITSIZE(int, 32);
- // can't work with the platforms using UTF-8 for wchar_t
- wxASSERT_MIN_BITSIZE(wchar_t, 16);
- @endcode
- @header{wx/debug.h}
- */
- #define wxASSERT_MIN_BITSIZE( type, size )
- /**
- Assert macro with message.
- An error message will be generated if the condition is @false.
- This macro should be used to catch (in debug builds) logical errors done
- by the programmer.
- @see wxASSERT(), wxCOMPILE_TIME_ASSERT()
- @header{wx/debug.h}
- */
- #define wxASSERT_MSG( condition, message )
- /**
- Checks that the condition is @true, returns with the given return value if
- not (stops execution in debug mode). This check is done even in release mode.
- This macro should be used to catch (both in debug and release builds) logical
- errors done by the programmer.
- @header{wx/debug.h}
- */
- #define wxCHECK( condition, retValue )
- /**
- Checks that the condition is @true, returns with the given return value if
- not (stops execution in debug mode). This check is done even in release mode.
- This macro may be only used in non-void functions, see also wxCHECK_RET().
- This macro should be used to catch (both in debug and release builds) logical
- errors done by the programmer.
- @header{wx/debug.h}
- */
- #define wxCHECK_MSG( condition, retValue, message )
- /**
- Checks that the condition is @true, and returns if not (stops execution
- with the given error message in debug mode). This check is done even in
- release mode.
- This macro should be used in void functions instead of wxCHECK_MSG().
- This macro should be used to catch (both in debug and release builds) logical
- errors done by the programmer.
- @header{wx/debug.h}
- */
- #define wxCHECK_RET( condition, message )
- /**
- Checks that the condition is @true, and if not, it will wxFAIL() and
- execute the given @c operation if it is not. This is a generalisation of
- wxCHECK() and may be used when something else than just returning from the
- function must be done when the @c condition is @false. This check is done
- even in release mode.
- This macro should be used to catch (both in debug and release builds) logical
- errors done by the programmer.
- @header{wx/debug.h}
- */
- #define wxCHECK2(condition, operation)
- /**
- This is the same as wxCHECK2(), but wxFAIL_MSG() with the specified
- @c message is called instead of wxFAIL() if the @c condition is @false.
- This macro should be used to catch (both in debug and release builds) logical
- errors done by the programmer.
- @header{wx/debug.h}
- */
- #define wxCHECK2_MSG( condition, operation, message )
- /**
- Using wxCOMPILE_TIME_ASSERT() results in a compilation error if the
- specified @c condition is @false. The compiler error message should include
- the @c message identifier - please note that it must be a valid C++
- identifier and not a string unlike in the other cases.
- This macro is mostly useful for testing the expressions involving the
- @c sizeof operator as they can't be tested by the preprocessor but it is
- sometimes desirable to test them at the compile time.
- Note that this macro internally declares a struct whose name it tries to
- make unique by using the @c __LINE__ in it but it may still not work if you
- use it on the same line in two different source files. In this case you may
- either change the line in which either of them appears on or use the
- wxCOMPILE_TIME_ASSERT2() macro.
- Also note that Microsoft Visual C++ has a bug which results in compiler
- errors if you use this macro with 'Program Database For Edit And Continue'
- (@c /ZI) option, so you shouldn't use it ('Program Database' (@c /Zi) is ok
- though) for the code making use of this macro.
- This macro should be used to catch misconfigurations at compile-time.
- @see wxASSERT_MSG(), wxASSERT_MIN_BITSIZE()
- @header{wx/debug.h}
- */
- #define wxCOMPILE_TIME_ASSERT( condition, message )
- /**
- This macro is identical to wxCOMPILE_TIME_ASSERT() except that it allows
- you to specify a unique @c name for the struct internally defined by this
- macro to avoid getting the compilation errors described for
- wxCOMPILE_TIME_ASSERT().
- This macro should be used to catch misconfigurations at compile-time.
- @header{wx/debug.h}
- */
- #define wxCOMPILE_TIME_ASSERT2(condition, message, name)
- /**
- Disable the condition checks in the assertions.
- This is the same as calling wxSetAssertHandler() with @NULL handler.
- @since 2.9.0
- @header{wx/debug.h}
- */
- void wxDisableAsserts();
- /**
- @def wxDISABLE_ASSERTS_IN_RELEASE_BUILD
- Use this macro to disable asserts in release build when not using
- wxIMPLEMENT_APP().
- By default, assert message boxes are suppressed in release build by
- wxIMPLEMENT_APP() which uses this macro. If you don't use wxIMPLEMENT_APP()
- because your application initializes wxWidgets directly (e.g. calls
- wxEntry() or wxEntryStart() itself) but still want to suppress assert
- notifications in release build you need to use this macro directly.
- @see wxDISABLE_DEBUG_SUPPORT()
- @since 2.9.1
- @header{wx/debug.h}
- */
- #define wxDISABLE_ASSERTS_IN_RELEASE_BUILD() wxDisableAsserts()
- /**
- Will always generate an assert error if this code is reached (in debug mode).
- Note that you don't have to (and cannot) use brackets when invoking this
- macro:
- @code
- if (...some condition...) {
- wxFAIL;
- }
- @endcode
- This macro should be used to catch (in debug builds) logical errors done
- by the programmer.
- @see wxFAIL_MSG()
- @header{wx/debug.h}
- */
- #define wxFAIL
- /**
- Will always generate an assert error with specified message if this code is
- reached (in debug mode).
- This macro is useful for marking "unreachable" code areas, for example it
- may be used in the "default:" branch of a switch statement if all possible
- cases are processed above.
- This macro should be used to catch (in debug builds) logical errors done
- by the programmer.
- @see wxFAIL()
- @header{wx/debug.h}
- */
- #define wxFAIL_MSG( message )
- /**
- Returns @true if the program is running under debugger, @false otherwise.
- Please note that this function is currently only implemented for Win32 and
- always returns @false elsewhere.
- @header{wx/debug.h}
- */
- bool wxIsDebuggerRunning();
- /**
- Sets the function to be called in case of assertion failure.
- The default assert handler forwards to wxApp::OnAssertFailure() whose
- default behaviour is, in turn, to show the standard assertion failure
- dialog if a wxApp object exists or shows the same dialog itself directly
- otherwise.
- While usually it is enough -- and more convenient -- to just override
- OnAssertFailure(), to handle all assertion failures, including those
- occurring even before wxApp object creation of after its destruction you
- need to provide your assertion handler function.
- This function also provides a simple way to disable all asserts: simply
- pass @NULL pointer to it. Doing this will result in not even evaluating
- assert conditions at all, avoiding almost all run-time cost of asserts.
- Notice that this function is not MT-safe, so you should call it before
- starting any other threads.
- The return value of this function is the previous assertion handler. It can
- be called after any pre-processing by your handler and can also be restored
- later if you uninstall your handler.
- @param handler
- The function to call in case of assertion failure or @NULL.
- @return
- The previous assert handler which is not @NULL by default but could be
- @NULL if it had been previously set to this value using this function.
- @since 2.9.0
- @header{wx/debug.h}
- */
- wxAssertHandler_t wxSetAssertHandler(wxAssertHandler_t handler);
- /**
- Reset the assert handler to default function which shows a message box when
- an assert happens.
- This can be useful for the applications compiled in release build (with @c
- NDEBUG defined) for which the asserts are by default disabled: if you wish
- to enable them even in this case you need to call this function.
- @since 2.9.1
- @header{wx/debug.h}
- */
- void wxSetDefaultAssertHandler();
- /**
- Generate a debugger exception meaning that the control is passed to the
- debugger if one is attached to the process.
- Otherwise the program just terminates abnormally.
- If @c wxDEBUG_LEVEL is 0 (which is not the default) this function does
- nothing.
- @header{wx/debug.h}
- */
- void wxTrap();
- //@}
|