/* * Copyright 1995, 2003 Perforce Software. All rights reserved. * * This file is part of Perforce - the FAST SCM System. */ class StrPtr; class StrBuf; class ErrorLog; enum P4DebugType { DT_DB, // DbOpen DT_DIFF, // Diff DT_DM, // Dm DT_DMC, // Dm commands DT_FTP, // Ftp Server DT_HANDLE, // Handles DT_LBR, // Lbr DT_MAP, // MapTable DT_NET, // Net DT_OPTIONS, // Optional behavior DT_PEEK, // Peeking DT_RCS, // RCS DT_RECORDS, // VarRecords DT_RPC, // Rpc DT_SERVER, // Server DT_SPEC, // Spec DT_TRACK, // Track DT_OB, // Offline Broker DT_VIEWGEN, // Streamw view generator DT_RPL, // Distributed functionality related DT_SSL, // SSL related DT_TIME, // Add timestamps to debug output DT_CLUSTER, // Cluster related DT_ZK, // p4zk related DT_LDAP, // LDAP related DT_LAST } ; class P4Tunable { public: void Set( const char *set ); void Unset( const char *set ); int Get( int t ) const { return list[t].value; } int GetLevel( const char *n ) const; int GetIndex( const char *n ) const; const char *GetName( int t ) const { return list[t].name; } int IsSet( int t ) const { return list[t].isSet; } int IsSet( const char * n ) const; int IsKnown( const char * n ); int IsNumeric( const char * n ); void Unbuffer(); void UnsetAll(); protected: static struct tunable { const char *name; int isSet; int value; int minVal; int maxVal; int modVal; int k; // what's 1k? 1000 or 1024? int original; } list[]; } ; typedef void (*DebugOutputHook)( void *context, const StrPtr *buffer ); class P4DebugConfig { public: P4DebugConfig(); virtual ~P4DebugConfig(); virtual void Output(); virtual StrBuf *Buffer(); virtual int Alloc( int ); void Install(); void SetErrorLog( ErrorLog *e ) { elog = e; } void SetOutputHook( void *ctx, DebugOutputHook hk ) { hook = hk; context = ctx; } static void TsPid2StrBuf( StrBuf &prefix ); protected: StrBuf *buf; int msz; ErrorLog *elog; DebugOutputHook hook; void *context; }; class P4Debug : private P4Tunable { public: void SetLevel( int l ); void SetLevel( const char *set ); void SetLevel( P4DebugType t, int l ) { list[t].value = l ;} int GetLevel( P4DebugType t ) const { return Get(t); } void ShowLevels( int showAll, StrBuf &buf ); void Event(); void printf( const char *fmt, ... ); }; /* * DEBUGPRINT and DEBUGPRINTF are generic debug macros. * These macros simply check to see if the passed condition * is true and if so prints out the message. The latter macro * takes arguments. * * It is expected that the underlying sub-project will * construct macros that that encapsulate the comparison * of their area's debug flag against specific levels: * e.g. # define DEBUG_SVR_ERROR ( p4debug.GetLevel( DT_SERVER ) >= 1 ) * # define DEBUG_SVR_WARN ( p4debug.GetLevel( DT_SERVER ) >= 2 ) * # define DEBUG_SVR_INFO ( p4debug.GetLevel( DT_SERVER ) >= 4 ) */ # define DEBUGPRINT(level, msg) \ do \ { \ if( level ) \ p4debug.printf( msg "\n" ); \ } while(0); # define DEBUGPRINTF( level, msg, ... ) \ do \ { \ if( level ) \ p4debug.printf( msg "\n", __VA_ARGS__ ); \ } while(0); extern P4Debug p4debug; extern P4Tunable p4tunable;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 19358 | AnnaTito |
Populate -o //guest/perforce_software/p4connect/... //guest/AnnaTito/dev/p4connect/.... |
||
//guest/perforce_software/p4connect/main/src/P4Bridge/p4api/include/p4/debug.h | |||||
#1 | 16209 | Norman Morse | Move entire source tree into "main" branch so workshop code will act correctly. | ||
//guest/perforce_software/p4connect/src/P4Bridge/p4api/include/p4/debug.h | |||||
#2 | 12135 | Norman Morse |
Integrate dev branch changes into main. This code is the basiis of the 2.7 BETA release which provides Unity 5 compatibility |
||
#1 | 10940 | Norman Morse |
Inital Workshop release of P4Connect. Released under BSD-2 license |