]> git.saurik.com Git - wxWidgets.git/blame - docs/doxygen/overviews/debugging.h
Fix problem with most of wxGTK headers not being installed.
[wxWidgets.git] / docs / doxygen / overviews / debugging.h
CommitLineData
15b6757b 1/////////////////////////////////////////////////////////////////////////////
d54cf7ff 2// Name: debugging.h
15b6757b 3// Purpose: topic overview
7d9550df
VZ
4// Author: Vadim Zeitlin
5// Copyright: (c) 2009 Vadim Zeitlin <vadim@wxwidgets.org>
15b6757b 6// RCS-ID: $Id$
526954c5 7// Licence: wxWindows licence
15b6757b
FM
8/////////////////////////////////////////////////////////////////////////////
9
880efa2a 10/**
36c9828f 11
928f1a07 12@page overview_debugging Debugging
36c9828f 13
7d9550df 14Classes, functions and macros: wxLog, @ref group_funcmacro_log, @ref group_funcmacro_debug
d54cf7ff 15
928f1a07 16Various classes, functions and macros are provided in wxWidgets to help you debug
7d9550df
VZ
17your application: @ref overview_debugging_dbgmacros allow you to insert various
18checks in your application which can be compiled out or disabled in release
19builds but are extremely useful while developing and @ref
20overview_debugging_logging which are not limited to debugging but are also
21useful for inserting traces into your application code. Both assertions and
22debug logging are also used by wxWidgets itself so you may encounter them even
23if you don't use either of these features yourself.
24
25
26@section overview_debugging_config Configuring debugging support
27
28Starting with wxWidgets 2.9.1 debugging features are always available by
29default (and not only in a special "debug" build of the library) and you need
30to predefine wxDEBUG_LEVEL symbol as 0 when building both the library and your
31application to remove them completely from the generated object code. However
32the debugging features are disabled by default when the application itself is
33built with @c NDEBUG defined (i.e. in "release" or "production" mode) so there
34is no need to do this, unless the resources of the system your application will
35be running on are unusually constrained (notice that when asserts are disabled
36their condition is not even evaluated so the only run-time cost is a single
37condition check and the extra space taken by the asserts in the code).
38
39This automatic deactivation of debugging code is done by IMPLEMENT_APP() macro
40so if you don't use you may need to explicitly call wxDISABLE_DEBUG_SUPPORT()
41yourself.
42
43Also notice that it is possible to build your own application with a different
44value of wxDEBUG_LEVEL than the one which was used for wxWidgets itself. E.g.
45you may be using an official binary version of the library which will have
46been compiled with default @code wxDEBUG_LEVEL == 1 @endcode but still predefine
47wxDEBUG_LEVEL as 0 for your own code.
48
49On the other hand, if you do want to keep the asserts even in production
50builds, you will probably want to override the handling of assertion failures
51as the default behaviour which pops up a message box notifying the user about
52the problem is usually inappropriate. Use wxSetAssertHandler() to set up your
53own custom function which should be called instead of the standard assertion
54failure handler. Such function could log an appropriate message in the
55application log file or maybe notify the user about the problem in some more
56user-friendly way.
57
58
59@section overview_debugging_dbgmacros Assertion macros
60
61wxASSERT(), wxFAIL(), wxCHECK() as well as their other variants (see @ref
62group_funcmacro_debug) are similar to the standard assert() macro but are more
63flexible and powerful. The first of them is equivalent to assert() itself, i.e.
64it simply checks a condition and does nothing if it is true. The second one is
65equivalent to checking an always false condition and is supposed to be used for
66code paths which are supposed to be inaccessible (e.g. @c default branch of a
67@c switch statement which should never be executed). Finally, the wxCHECK()
68family of macros verifies the condition just as wxASSERT() does and performs
69some action such returning from the function if it fails -- thus, it is useful
70for checking the functions preconditions.
71
72All of the above functions exist in @c _MSG variants which allow you to provide
73a custom message which will be shown (or, more generally, passed to the assert
74handler) if the assertion fails, in addition to the usual file and line number
75information and the condition itself.
76
77Example of using an assertion macro:
928f1a07 78@code
7d9550df 79void GetTheAnswer(int *p)
928f1a07 80{
7d9550df 81 wxCHECK_RET( p, "pointer can't be NULL in GetTheAnswer()" );
36c9828f 82
7d9550df 83 *p = 42;
928f1a07
FM
84};
85@endcode
36c9828f 86
7d9550df
VZ
87If the condition is false, i.e. @c p is @NULL, the assertion handler is called
88and, in any case (even when wxDEBUG_LEVEL is 0), the function returns without
89dereferencing the NULL pointer on the next line thus avoiding a crash.
90
91The default assertion handler behaviour depends on whether the application
92using wxWidgets was compiled in release build (with @c NDEBUG defined) or debug
93one (without) but may be changed in either case as explained above. If it
94wasn't changed, then nothing will happen in the release build and a message box
95showing the information about the assert as well as allowing to stop the
96program, ignore future asserts or break into the debugger is shown. On the
97platforms where wxStackWalker is supported the message box will also show the
98stack trace at the moment when the assert failed often allowing you to diagnose
99the problem without using the debugger at all. You can see an example of such
100message box in the @ref page_samples_except.
36c9828f
FM
101
102
36c9828f 103
928f1a07 104@section overview_debugging_logging Logging functions
d54cf7ff 105
928f1a07
FM
106You can use the wxLogDebug and wxLogTrace functions to output debugging information in
107debug mode; it will do nothing for non-debugging code.
d54cf7ff
FM
108
109
110
d54cf7ff 111*/
36c9828f 112