TRACE_MANAGER: very simple run-time tracing infrastructure
This commit is contained in:
parent
2f8ad08739
commit
ee8b2113a8
|
@ -29,6 +29,7 @@
|
|||
|
||||
#include <trace_helpers.h>
|
||||
|
||||
#include <wx/tokenzr.h>
|
||||
|
||||
const wxChar* const traceFindReplace = wxT( "KICAD_FIND_REPLACE" );
|
||||
const wxChar* const kicadTraceCoords = wxT( "KICAD_COORDS" );
|
||||
|
@ -275,3 +276,55 @@ wxString dump( const wxKeyEvent& aEvent )
|
|||
|
||||
return msg;
|
||||
}
|
||||
|
||||
|
||||
TRACE_MANAGER& TRACE_MANAGER::Instance()
|
||||
{
|
||||
static TRACE_MANAGER* self = nullptr;
|
||||
|
||||
if( !self )
|
||||
{
|
||||
self = new TRACE_MANAGER;
|
||||
self->init();
|
||||
}
|
||||
|
||||
return *self;
|
||||
}
|
||||
|
||||
void TRACE_MANAGER::traceV( const wxString& aWhat, const wxString& aFmt, va_list vargs )
|
||||
{
|
||||
if( !m_printAllTraces )
|
||||
{
|
||||
if( !m_globalTraceEnabled )
|
||||
return;
|
||||
|
||||
if( m_enabledTraces.find( aWhat ) == m_enabledTraces.end() )
|
||||
return;
|
||||
}
|
||||
|
||||
wxString str;
|
||||
str.PrintfV( aFmt, vargs );
|
||||
|
||||
#ifdef __unix__
|
||||
fprintf( stderr, " %-30s | %s", aWhat.c_str().AsChar(), str.c_str().AsChar() );
|
||||
#endif
|
||||
}
|
||||
|
||||
void TRACE_MANAGER::init()
|
||||
{
|
||||
wxString traceVars;
|
||||
m_globalTraceEnabled = wxGetEnv( wxT( "KICAD_TRACE" ), &traceVars );
|
||||
m_printAllTraces = false;
|
||||
|
||||
if( !m_globalTraceEnabled )
|
||||
return;
|
||||
|
||||
wxStringTokenizer tokenizer( traceVars, wxT( "," ) );
|
||||
while( tokenizer.HasMoreTokens() )
|
||||
{
|
||||
wxString token = tokenizer.GetNextToken();
|
||||
m_enabledTraces[token] = true;
|
||||
if( token == wxT( "all" ) )
|
||||
m_printAllTraces = true;
|
||||
}
|
||||
}
|
|
@ -34,6 +34,9 @@
|
|||
#include <wx/event.h>
|
||||
#include <wx/string.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <map>
|
||||
|
||||
/**
|
||||
* @defgroup trace_env_vars Trace Environment Variables
|
||||
*
|
||||
|
@ -213,4 +216,44 @@ extern wxString dump( const wxKeyEvent& aEvent );
|
|||
*/
|
||||
extern wxString dump( const wxArrayString& aArray );
|
||||
|
||||
class TRACE_MANAGER
|
||||
{
|
||||
public:
|
||||
TRACE_MANAGER(){};
|
||||
~TRACE_MANAGER(){};
|
||||
|
||||
static TRACE_MANAGER& Instance();
|
||||
|
||||
WX_DEFINE_VARARG_FUNC_VOID( Trace, 2, (const wxString, const wxFormatString&), DoTrace,
|
||||
DoTraceUtf8 )
|
||||
|
||||
void DoTrace( const wxString aWhat, const wxChar* aFmt, ... )
|
||||
{
|
||||
va_list argptr;
|
||||
va_start( argptr, aFmt );
|
||||
traceV( aWhat, aFmt, argptr );
|
||||
va_end( argptr );
|
||||
}
|
||||
|
||||
#if wxUSE_UNICODE_UTF8
|
||||
void DoTraceUtf8( const wxString aWhat, const wxChar* aFmt, ... )
|
||||
{
|
||||
va_list argptr;
|
||||
va_start( argptr, format );
|
||||
traceV( aWhat, aFmt, argptr );
|
||||
va_end( argptr );
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
void traceV( const wxString& aWhat, const wxString& aFmt, va_list vargs );
|
||||
void init();
|
||||
|
||||
std::map<wxString, bool> m_enabledTraces;
|
||||
bool m_globalTraceEnabled;
|
||||
bool m_printAllTraces;
|
||||
};
|
||||
|
||||
#define KI_TRACE( ... ) TRACE_MANAGER::Instance().Trace( __VA_ARGS__ )
|
||||
|
||||
#endif // _TRACE_HELPERS_H_
|
||||
|
|
Loading…
Reference in New Issue