btobexprofiles/obexreceiveservices/opp/inc/debug.h
author hgs
Fri, 28 May 2010 17:03:06 +0300
changeset 32 19bd632b5100
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  Logging definition
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
#ifndef PRJ_LOGGING_H
hgs
parents:
diff changeset
    20
#define PRJ_LOGGING_H
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "debugconfig.h"
hgs
parents:
diff changeset
    23
hgs
parents:
diff changeset
    24
#ifdef PRJ_ENABLE_TRACE
hgs
parents:
diff changeset
    25
hgs
parents:
diff changeset
    26
#ifdef PRJ_FILE_TRACE
hgs
parents:
diff changeset
    27
#include <flogger.h>
hgs
parents:
diff changeset
    28
#else
hgs
parents:
diff changeset
    29
#include <e32debug.h>
hgs
parents:
diff changeset
    30
#endif
hgs
parents:
diff changeset
    31
hgs
parents:
diff changeset
    32
const TInt KMaxLogLineLength = 512;
hgs
parents:
diff changeset
    33
hgs
parents:
diff changeset
    34
#define KPRINTERROR        0x00000001 // Tracing level: error
hgs
parents:
diff changeset
    35
#define KPRINTINFO        0x00000002 // Tracing level: function trace
hgs
parents:
diff changeset
    36
#define KPRINTSTATE        0x00000004 // Tracing level: state machine info
hgs
parents:
diff changeset
    37
#define KPRINTWARNING   0x00000008 // Tracing level: warning
hgs
parents:
diff changeset
    38
hgs
parents:
diff changeset
    39
const TInt KTraceMask = KPRINTERROR | KPRINTINFO | KPRINTSTATE | KPRINTWARNING;
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
NONSHARABLE_CLASS(TOverflowTruncate16) : public TDes16Overflow
hgs
parents:
diff changeset
    42
    {
hgs
parents:
diff changeset
    43
public:
hgs
parents:
diff changeset
    44
    void Overflow(TDes16& /*aDes*/) {}
hgs
parents:
diff changeset
    45
    };
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
NONSHARABLE_CLASS(TOverflowTruncate8) : public TDes8Overflow
hgs
parents:
diff changeset
    48
    {
hgs
parents:
diff changeset
    49
public:
hgs
parents:
diff changeset
    50
    void Overflow(TDes8& /*aDes*/) {}
hgs
parents:
diff changeset
    51
    };
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
inline void Trace(TRefByValue<const TDesC16> aFmt, ...)
hgs
parents:
diff changeset
    54
    {
hgs
parents:
diff changeset
    55
    VA_LIST list;
hgs
parents:
diff changeset
    56
    VA_START(list,aFmt);
hgs
parents:
diff changeset
    57
#ifdef PRJ_FILE_TRACE
hgs
parents:
diff changeset
    58
    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
hgs
parents:
diff changeset
    59
#else
hgs
parents:
diff changeset
    60
    TBuf16<KMaxLogLineLength> theFinalString;
hgs
parents:
diff changeset
    61
    theFinalString.Append(KTracePrefix16);
hgs
parents:
diff changeset
    62
    TOverflowTruncate16 overflow;
hgs
parents:
diff changeset
    63
    theFinalString.AppendFormatList(aFmt,list,&overflow);
hgs
parents:
diff changeset
    64
    RDebug::Print(theFinalString);
hgs
parents:
diff changeset
    65
#endif
hgs
parents:
diff changeset
    66
    }
hgs
parents:
diff changeset
    67
hgs
parents:
diff changeset
    68
inline void Trace(TRefByValue<const TDesC8> aFmt, ...)
hgs
parents:
diff changeset
    69
    {
hgs
parents:
diff changeset
    70
    VA_LIST list;
hgs
parents:
diff changeset
    71
    VA_START(list, aFmt);
hgs
parents:
diff changeset
    72
#ifdef PRJ_FILE_TRACE
hgs
parents:
diff changeset
    73
    RFileLogger::WriteFormat(KLogDir, KLogFile, EFileLoggingModeAppend, aFmt, list);
hgs
parents:
diff changeset
    74
#else
hgs
parents:
diff changeset
    75
    TOverflowTruncate8 overflow;
hgs
parents:
diff changeset
    76
    TBuf8<KMaxLogLineLength> buf8;
hgs
parents:
diff changeset
    77
    buf8.Append(KTracePrefix8);
hgs
parents:
diff changeset
    78
    buf8.AppendFormatList(aFmt, list, &overflow);
hgs
parents:
diff changeset
    79
    TBuf16<KMaxLogLineLength> buf16(buf8.Length());
hgs
parents:
diff changeset
    80
    buf16.Copy(buf8);
hgs
parents:
diff changeset
    81
    TRefByValue<const TDesC> tmpFmt(_L("%S"));
hgs
parents:
diff changeset
    82
    RDebug::Print(tmpFmt, &buf16);
hgs
parents:
diff changeset
    83
#endif
hgs
parents:
diff changeset
    84
    }
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
inline void TracePanic(
hgs
parents:
diff changeset
    87
    char* aFile, 
hgs
parents:
diff changeset
    88
    TInt aLine,
hgs
parents:
diff changeset
    89
    TInt aPanicCode,
hgs
parents:
diff changeset
    90
    const TDesC& aPanicCategory)
hgs
parents:
diff changeset
    91
    {
hgs
parents:
diff changeset
    92
    TPtrC8 fullFileName((const TUint8*)aFile);
hgs
parents:
diff changeset
    93
    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
hgs
parents:
diff changeset
    94
    TBuf8<KMaxLogLineLength> buf;
hgs
parents:
diff changeset
    95
    buf.Append(KPanicPrefix8);
hgs
parents:
diff changeset
    96
    buf.AppendFormat(_L8("%d at line %d in file %S"), aPanicCode, aLine, &fileName);
hgs
parents:
diff changeset
    97
    Trace(buf);
hgs
parents:
diff changeset
    98
    User::Panic(aPanicCategory, aPanicCode); 
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
inline void TraceLeave(char* aFile, TInt aLine, TInt aReason)
hgs
parents:
diff changeset
   102
    {
hgs
parents:
diff changeset
   103
    TPtrC8 fullFileName((const TUint8*)aFile);
hgs
parents:
diff changeset
   104
    TPtrC8 fileName(fullFileName.Ptr()+fullFileName.LocateReverse('\\')+1);
hgs
parents:
diff changeset
   105
    TBuf8<KMaxLogLineLength> buf;
hgs
parents:
diff changeset
   106
    buf.Append(KLeavePrefix8);
hgs
parents:
diff changeset
   107
    buf.AppendFormat(_L8("%d at line %d in file %S"), aReason, aLine, &fileName);
hgs
parents:
diff changeset
   108
    Trace(buf);
hgs
parents:
diff changeset
   109
    User::LeaveIfError(aReason);
hgs
parents:
diff changeset
   110
    }
hgs
parents:
diff changeset
   111
hgs
parents:
diff changeset
   112
#define TRACE_INFO(p) {if(KTraceMask & KPRINTINFO) Trace p;}
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
#define TRACE_ERROR(p) {if(KTraceMask & KPRINTERROR) Trace p;}
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
#define TRACE_STATE(p) {if(KTraceMask & KPRINTSTATE) Trace p;}
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
#define TRACE_WARNING(p) {if(KTraceMask & KPRINTWARNING) Trace p;}
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
#define TRACE_INFO_SEG(p) {if(KTraceMask & KPRINTINFO) p;}
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
#define TRACE_ASSERT(GUARD, CODE) {if (!(GUARD)) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory);}
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
#define PANIC(CODE) TracePanic(__FILE__, __LINE__, CODE, KPanicCategory)
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
#define LEAVE_IF_ERROR(REASON) {if (REASON) TraceLeave(__FILE__, __LINE__, REASON);}
hgs
parents:
diff changeset
   127
hgs
parents:
diff changeset
   128
#define LEAVE(REASON) {TraceLeave(__FILE__, __LINE__, REASON);}
hgs
parents:
diff changeset
   129
hgs
parents:
diff changeset
   130
#define TRACE_FUNC_ENTRY {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryFormat8, &ptr8);}}
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
#define TRACE_FUNC_ENTRY_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncEntryThisFormat8, &ptr8, this);}}
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
#define TRACE_FUNC_EXIT {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncExitFormat8, &ptr8);}}
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
#define TRACE_FUNC {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncFormat8, &ptr8);}}
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
#define TRACE_FUNC_THIS {if(KTraceMask & KPRINTINFO) { TPtrC8 ptr8((TUint8*)__PRETTY_FUNCTION__); Trace(KFuncThisFormat8, &ptr8, this);}}
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
#define RETURN_IF_ERR(ERR) {if(ERR) {TPtrC8 ptr8((TUint8*)__FILE__); Trace(_L8(" RETURN %d at file %S line %d"), ERR, &ptr8, __LINE__); return ERR;}}
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
#define TRACE_ONLY(p) p
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
#else // PRJ_ENABLE_TRACE not defined
hgs
parents:
diff changeset
   145
hgs
parents:
diff changeset
   146
#define TRACE_INFO(p)
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
#define TRACE_ERROR(p)
hgs
parents:
diff changeset
   149
hgs
parents:
diff changeset
   150
#define TRACE_STATE(p)
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
#define TRACE_WARNING(p)
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
#define TRACE_INFO_SEG(p)
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
#define TRACE_ASSERT(GUARD, CODE)
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
#define PANIC(CODE) {User::Panic(KPanicCategory, CODE);}
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
#define LEAVE_IF_ERROR(REASON) {static_cast<void>(User::LeaveIfError(REASON));}
hgs
parents:
diff changeset
   161
hgs
parents:
diff changeset
   162
#define LEAVE(REASON) {static_cast<void>(User::Leave(REASON));}
hgs
parents:
diff changeset
   163
hgs
parents:
diff changeset
   164
#define TRACE_FUNC_ENTRY
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
#define TRACE_FUNC_ENTRY_THIS
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
#define TRACE_FUNC_EXIT
hgs
parents:
diff changeset
   169
hgs
parents:
diff changeset
   170
#define TRACE_FUNC
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
#define TRACE_FUNC_THIS
hgs
parents:
diff changeset
   173
hgs
parents:
diff changeset
   174
#define RETURN_IF_ERR(ERR) {if(ERR) return ERR;}
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
#define TRACE_ONLY(p)
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
#endif // PRJ_ENABLE_TRACE
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
#endif // PRJ_LOGGING_H