2008-03-08 13:52:38 +00:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: memory.h
|
2008-03-10 15:24:38 +00:00
|
|
|
// Purpose: interface of wxDebugStreamBuf
|
2008-03-08 13:52:38 +00:00
|
|
|
// Author: wxWidgets team
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Licence: wxWindows license
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxDebugStreamBuf
|
|
|
|
@wxheader{memory.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
This class allows you to treat debugging output in a similar
|
|
|
|
(stream-based) fashion on different platforms. Under
|
|
|
|
Windows, an ostream constructed with this buffer outputs
|
|
|
|
to the debugger, or other program that intercepts debugging
|
|
|
|
output. On other platforms, the output goes to standard error (cerr).
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
This is soon to be obsolete, replaced by wxLog functionality.
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxbase}
|
|
|
|
@category{FIXME}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
@see Overview()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-08 14:43:31 +00:00
|
|
|
class wxDebugStreamBuf
|
2008-03-08 13:52:38 +00:00
|
|
|
{
|
|
|
|
public:
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
/**
|
|
|
|
@class wxDebugContext
|
|
|
|
@wxheader{memory.h}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
A class for performing various debugging and memory tracing
|
|
|
|
operations. Full functionality (such as printing out objects
|
|
|
|
currently allocated) is only present in a debugging build of wxWidgets,
|
|
|
|
i.e. if the __WXDEBUG__ symbol is defined. wxDebugContext
|
|
|
|
and related functions and macros can be compiled out by setting
|
|
|
|
wxUSE_DEBUG_CONTEXT to 0 is setup.h
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@library{wxbase}
|
|
|
|
@category{debugging}
|
2008-03-08 14:43:31 +00:00
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
@see Overview()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-08 14:43:31 +00:00
|
|
|
class wxDebugContext
|
2008-03-08 13:52:38 +00:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Checks the memory blocks for errors, starting from the currently set
|
|
|
|
checkpoint.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@returns Returns the number of errors, so a value of zero represents
|
2008-03-09 12:33:59 +00:00
|
|
|
success. Returns -1 if an error was detected that
|
|
|
|
prevents further checking.
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
int Check();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Performs a memory dump from the currently set checkpoint, writing to the
|
|
|
|
current debug stream. Calls the @b Dump member function for each wxObject
|
|
|
|
derived instance.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
@returns @true if the function succeeded, @false otherwise.
|
|
|
|
*/
|
|
|
|
bool Dump();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns @true if the memory allocator checks all previous memory blocks for
|
|
|
|
errors.
|
|
|
|
By default, this is @false since it slows down execution considerably.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see SetCheckPrevious()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
bool GetCheckPrevious();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns @true if debug mode is on. If debug mode is on, the wxObject new and
|
|
|
|
delete
|
|
|
|
operators store or use information about memory allocation. Otherwise,
|
|
|
|
a straight malloc and free will be performed by these operators.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see SetDebugMode()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
bool GetDebugMode();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gets the debug level (default 1). The debug level is used by the wxTraceLevel
|
|
|
|
function and
|
|
|
|
the WXTRACELEVEL macro to specify how detailed the trace information is; setting
|
|
|
|
a different level will only have an effect if trace statements in the
|
|
|
|
application
|
|
|
|
specify a value other than one.
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see SetLevel()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
int GetLevel();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the output stream associated with the debug context.
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see SetStream()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
ostream GetStream();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns a pointer to the output stream buffer associated with the debug context.
|
|
|
|
There may not necessarily be a stream buffer if the stream has been set
|
|
|
|
by the user.
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
|
|
|
*/
|
|
|
|
streambuf* GetStreamBuf();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns @true if there is a stream currently associated
|
|
|
|
with the debug context.
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see SetStream(), GetStream()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
bool HasStream();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Prints a list of the classes declared in this application, giving derivation
|
|
|
|
and whether instances of this class can be dynamically created.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see PrintStatistics()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
bool PrintClasses();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Performs a statistics analysis from the currently set checkpoint, writing
|
|
|
|
to the current debug stream. The number of object and non-object
|
|
|
|
allocations is printed, together with the total size.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 14:43:31 +00:00
|
|
|
@param detailed
|
2008-03-09 12:33:59 +00:00
|
|
|
If @true, the function will also print how many
|
|
|
|
objects of each class have been allocated, and the space taken by
|
|
|
|
these class instances.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see PrintStatistics()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-09 12:33:59 +00:00
|
|
|
bool PrintStatistics(bool detailed = true);
|
2008-03-08 13:52:38 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Tells the memory allocator to check all previous memory blocks for errors.
|
|
|
|
By default, this is @false since it slows down execution considerably.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see GetCheckPrevious()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
void SetCheckPrevious(bool check);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the current checkpoint: Dump and PrintStatistics operations will
|
|
|
|
be performed from this point on. This allows you to ignore allocations
|
|
|
|
that have been performed up to this point.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 14:43:31 +00:00
|
|
|
@param all
|
2008-03-09 12:33:59 +00:00
|
|
|
If @true, the checkpoint is reset to include all
|
|
|
|
memory allocations since the program started.
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-09 12:33:59 +00:00
|
|
|
void SetCheckpoint(bool all = false);
|
2008-03-08 13:52:38 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the debug mode on or off. If debug mode is on, the wxObject new and delete
|
|
|
|
operators store or use information about memory allocation. Otherwise,
|
|
|
|
a straight malloc and free will be performed by these operators.
|
|
|
|
By default, debug mode is on if __WXDEBUG__ is defined. If the application
|
|
|
|
uses this function, it should make sure that all object memory allocated
|
|
|
|
is deallocated with the same value of debug mode. Otherwise, the
|
|
|
|
delete operator might try to look for memory information that does not
|
|
|
|
exist.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see GetDebugMode()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
void SetDebugMode(bool debug);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the current debug file and creates a stream. This will delete any existing
|
|
|
|
stream and stream buffer. By default, the debug context stream
|
|
|
|
outputs to the debugger (Windows) or standard error (other platforms).
|
|
|
|
*/
|
|
|
|
bool SetFile(const wxString& filename);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the debug level (default 1). The debug level is used by the wxTraceLevel
|
|
|
|
function and
|
|
|
|
the WXTRACELEVEL macro to specify how detailed the trace information is; setting
|
|
|
|
a different level will only have an effect if trace statements in the
|
|
|
|
application
|
|
|
|
specify a value other than one.
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-09 12:33:59 +00:00
|
|
|
@see GetLevel()
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
|
|
|
void SetLevel(int level);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Installs a function to be called at the end of wxWidgets shutdown. It will be
|
|
|
|
called after
|
|
|
|
all files with global instances of wxDebugContextDumpDelayCounter have run
|
|
|
|
their destructors.
|
|
|
|
The shutdown function must be take no parameters and return nothing.
|
|
|
|
*/
|
|
|
|
void SetShutdownNotifyFunction(wxShutdownNotifyFunction func);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the debugging stream to be the debugger (Windows) or standard error (other
|
|
|
|
platforms).
|
|
|
|
This is the default setting. The existing stream will be flushed and deleted.
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
|
|
|
*/
|
|
|
|
bool SetStandardError();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the stream and optionally, stream buffer associated with the debug context.
|
|
|
|
This operation flushes and deletes the existing stream (and stream buffer if
|
|
|
|
any).
|
|
|
|
This is obsolete, replaced by wxLog functionality.
|
2008-03-20 13:45:17 +00:00
|
|
|
|
2008-03-08 14:43:31 +00:00
|
|
|
@param stream
|
2008-03-09 12:33:59 +00:00
|
|
|
Stream to associate with the debug context. Do not set this to @NULL.
|
2008-03-08 14:43:31 +00:00
|
|
|
@param streamBuf
|
2008-03-09 12:33:59 +00:00
|
|
|
Stream buffer to associate with the debug context.
|
2008-03-08 13:52:38 +00:00
|
|
|
*/
|
2008-03-09 12:33:59 +00:00
|
|
|
void SetStream(ostream* stream, streambuf* streamBuf = NULL);
|
2008-03-08 13:52:38 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 15:24:38 +00:00
|
|
|
|
2008-03-08 13:52:38 +00:00
|
|
|
// ============================================================================
|
|
|
|
// Global functions/macros
|
|
|
|
// ============================================================================
|
|
|
|
|
|
|
|
/**
|
|
|
|
@b NB: This function is now obsolete, replaced by @ref overview_logfunctions
|
|
|
|
"Log functions".
|
|
|
|
Calls wxTraceLevel with printf-style variable argument syntax. Output
|
|
|
|
is directed to the current output stream (see wxDebugContext).
|
|
|
|
The first argument should be the level at which this information is appropriate.
|
|
|
|
It will only be output if the level returned by wxDebugContext::GetLevel is
|
|
|
|
equal to or greater than
|
|
|
|
this value.
|
|
|
|
*/
|
|
|
|
#define WXTRACELEVEL() /* implementation is private */
|
|
|
|
|
|
|
|
/**
|
|
|
|
@b NB: This function is now obsolete, replaced by @ref overview_logfunctions
|
|
|
|
"Log functions".
|
|
|
|
Takes printf-style variable argument syntax. Output
|
|
|
|
is directed to the current output stream (see wxDebugContext).
|
|
|
|
*/
|
|
|
|
void wxTrace(const wxString& fmt, ... );
|
|
|
|
|
|
|
|
/**
|
|
|
|
@b NB: This macro is now obsolete, replaced by @ref overview_logfunctions "Log
|
|
|
|
functions".
|
|
|
|
Calls wxTrace with printf-style variable argument syntax. Output
|
|
|
|
is directed to the current output stream (see wxDebugContext).
|
|
|
|
*/
|
|
|
|
#define Include files WXTRACE() /* implementation is private */
|
|
|
|
|