emailservices/emaildebug/inc/emailtrace.h
author hgs
Fri, 14 May 2010 04:41:45 +0300
changeset 40 2c62ef3caffd
parent 18 578830873419
child 30 759dc5235cdb
permissions -rw-r--r--
201019
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
     1
/*
40
hgs
parents: 18
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents: 18
diff changeset
     3
 * All rights reserved.
hgs
parents: 18
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents: 18
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents: 18
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents: 18
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents: 18
diff changeset
     8
 *
hgs
parents: 18
diff changeset
     9
 * Initial Contributors:
hgs
parents: 18
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents: 18
diff changeset
    11
 *
hgs
parents: 18
diff changeset
    12
 * Contributors:
hgs
parents: 18
diff changeset
    13
 *
hgs
parents: 18
diff changeset
    14
 * Description:
hgs
parents: 18
diff changeset
    15
 *
hgs
parents: 18
diff changeset
    16
 */
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    17
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    18
#ifndef EMAILTRACE_H
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    19
#define EMAILTRACE_H
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    20
40
hgs
parents: 18
diff changeset
    21
#include <e32debug.h>
hgs
parents: 18
diff changeset
    22
#include <qdebug.h>
hgs
parents: 18
diff changeset
    23
#include <qfile.h>
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    24
40
hgs
parents: 18
diff changeset
    25
/*
hgs
parents: 18
diff changeset
    26
 * The macros COMMENT_TRACES, ERROR_TRACES, and FUNCTION_TRACES control which
hgs
parents: 18
diff changeset
    27
 * trace messages are printed. The trace message logging is controlled with
hgs
parents: 18
diff changeset
    28
 * the LOG_TO_FILE macro, whereas the LOG_FILE macro defines which file is to
hgs
parents: 18
diff changeset
    29
 * be used in logging. The print_trace() helper function implements printing.
hgs
parents: 18
diff changeset
    30
 * If LOG_TO_FILE is zero or the LOG_FILE cannot be opened, the messages are
hgs
parents: 18
diff changeset
    31
 * printed to qDebug().
hgs
parents: 18
diff changeset
    32
 */
hgs
parents: 18
diff changeset
    33
#if defined(DEBUG) || defined(_DEBUG)
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    34
40
hgs
parents: 18
diff changeset
    35
#define COMMENT_TRACES  1
hgs
parents: 18
diff changeset
    36
#define ERROR_TRACES    1
hgs
parents: 18
diff changeset
    37
#define FUNCTION_TRACES 1
hgs
parents: 18
diff changeset
    38
hgs
parents: 18
diff changeset
    39
#if COMMENT_TRACES || ERROR_TRACES || FUNCTION_TRACES
hgs
parents: 18
diff changeset
    40
hgs
parents: 18
diff changeset
    41
#define LOG_TO_FILE     0
hgs
parents: 18
diff changeset
    42
#define LOG_FILE        "c:/logs/nmail_trace.log"
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    43
40
hgs
parents: 18
diff changeset
    44
inline void print_trace(const QString& msg)
hgs
parents: 18
diff changeset
    45
{
hgs
parents: 18
diff changeset
    46
    QFile out(LOG_FILE);
hgs
parents: 18
diff changeset
    47
    if (LOG_TO_FILE && out.open(QIODevice::Append | QIODevice::Text)) {
hgs
parents: 18
diff changeset
    48
        QDebug(&out) << "[Nmail]" << msg;
hgs
parents: 18
diff changeset
    49
        out.putChar('\n');
hgs
parents: 18
diff changeset
    50
        out.close();
hgs
parents: 18
diff changeset
    51
    } else {
hgs
parents: 18
diff changeset
    52
        qDebug() << "[Nmail]" << msg;
hgs
parents: 18
diff changeset
    53
    }
hgs
parents: 18
diff changeset
    54
}
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    55
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    56
#endif
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    57
40
hgs
parents: 18
diff changeset
    58
#endif /* DEBUG */
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    59
40
hgs
parents: 18
diff changeset
    60
/*
hgs
parents: 18
diff changeset
    61
 * The function NM_COMMENT() prints a trace message. The INFO macros are
hgs
parents: 18
diff changeset
    62
 * provided for legacy compatibility. They are deprecated and should not be
hgs
parents: 18
diff changeset
    63
 * used. If sprintf() type of formatting is desired, consider using QString::
hgs
parents: 18
diff changeset
    64
 * arg() or QTextStream.
hgs
parents: 18
diff changeset
    65
 */
hgs
parents: 18
diff changeset
    66
#if COMMENT_TRACES
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    67
40
hgs
parents: 18
diff changeset
    68
inline void NM_COMMENT(const QString& msg)
hgs
parents: 18
diff changeset
    69
{
hgs
parents: 18
diff changeset
    70
    print_trace("COMMENT : " + msg);
hgs
parents: 18
diff changeset
    71
}
hgs
parents: 18
diff changeset
    72
#define INFO(msg) NM_COMMENT(msg)
hgs
parents: 18
diff changeset
    73
#define INFO_1(msg,arg1)\
hgs
parents: 18
diff changeset
    74
do {\
hgs
parents: 18
diff changeset
    75
    QString __msg;\
hgs
parents: 18
diff changeset
    76
    __msg.sprintf(msg,arg1);\
hgs
parents: 18
diff changeset
    77
    NM_COMMENT(__msg);\
hgs
parents: 18
diff changeset
    78
} while (0)
hgs
parents: 18
diff changeset
    79
#define INFO_2(msg,arg1,arg2)\
hgs
parents: 18
diff changeset
    80
do {\
hgs
parents: 18
diff changeset
    81
    QString __msg;\
hgs
parents: 18
diff changeset
    82
    __msg.sprintf(msg,arg1,arg2);\
hgs
parents: 18
diff changeset
    83
    NM_COMMENT(__msg);\
hgs
parents: 18
diff changeset
    84
} while (0)
hgs
parents: 18
diff changeset
    85
#define INFO_3(msg,arg1,arg2,arg3)\
hgs
parents: 18
diff changeset
    86
do {\
hgs
parents: 18
diff changeset
    87
    QString __msg;\
hgs
parents: 18
diff changeset
    88
    __msg.sprintf(msg,arg1,arg2,arg3);\
hgs
parents: 18
diff changeset
    89
    NM_COMMENT(__msg);\
hgs
parents: 18
diff changeset
    90
} while (0)
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    91
40
hgs
parents: 18
diff changeset
    92
#else
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    93
40
hgs
parents: 18
diff changeset
    94
#define NM_COMMENT(msg)
hgs
parents: 18
diff changeset
    95
#define INFO(msg)
hgs
parents: 18
diff changeset
    96
#define INFO_1(msg,arg1)
hgs
parents: 18
diff changeset
    97
#define INFO_2(msg,arg1,arg2)
hgs
parents: 18
diff changeset
    98
#define INFO_3(msg,arg1,arg2,arg3)
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
    99
40
hgs
parents: 18
diff changeset
   100
#endif /* COMMENT_TRACES */
18
578830873419 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   101
40
hgs
parents: 18
diff changeset
   102
/*
hgs
parents: 18
diff changeset
   103
 * The function NM_ERROR() prints its second argument if the first argument
hgs
parents: 18
diff changeset
   104
 * is non-zero. The ERROR macros are provided for legacy compatibility. They
hgs
parents: 18
diff changeset
   105
 * are deprecated and should not be used. If sprintf() type of formatting is
hgs
parents: 18
diff changeset
   106
 * desired, consider using QString::arg() or QTextStream.
hgs
parents: 18
diff changeset
   107
 */
hgs
parents: 18
diff changeset
   108
#if ERROR_TRACES
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   109
40
hgs
parents: 18
diff changeset
   110
inline void NM_ERROR(int err, const QString& msg)
hgs
parents: 18
diff changeset
   111
{
hgs
parents: 18
diff changeset
   112
    if (err) {
hgs
parents: 18
diff changeset
   113
        print_trace("ERROR : " + msg);
hgs
parents: 18
diff changeset
   114
    }
hgs
parents: 18
diff changeset
   115
}
hgs
parents: 18
diff changeset
   116
#define ERROR(err,msg) NM_ERROR(err,msg)
hgs
parents: 18
diff changeset
   117
#define ERROR_1(err,msg,arg1)\
hgs
parents: 18
diff changeset
   118
do {\
hgs
parents: 18
diff changeset
   119
    QString __msg;\
hgs
parents: 18
diff changeset
   120
    __msg.sprintf(msg,arg1);\
hgs
parents: 18
diff changeset
   121
    NM_ERROR(err,__msg);\
hgs
parents: 18
diff changeset
   122
} while (0)
hgs
parents: 18
diff changeset
   123
#define ERROR_2(err,msg,arg1,arg2)\
hgs
parents: 18
diff changeset
   124
do {\
hgs
parents: 18
diff changeset
   125
    QString __msg;\
hgs
parents: 18
diff changeset
   126
    __msg.sprintf(msg,arg1,arg2);\
hgs
parents: 18
diff changeset
   127
    NM_ERROR(err,__msg);\
hgs
parents: 18
diff changeset
   128
} while(0)
hgs
parents: 18
diff changeset
   129
#define ERROR_3(err,msg,arg1,arg2,arg3)\
hgs
parents: 18
diff changeset
   130
do {\
hgs
parents: 18
diff changeset
   131
    QString __msg;\
hgs
parents: 18
diff changeset
   132
    __msg.sprintf(msg,arg1,srg2,arg3);\
hgs
parents: 18
diff changeset
   133
    NM_ERROR(err,__msg);\
hgs
parents: 18
diff changeset
   134
} while(0)
hgs
parents: 18
diff changeset
   135
#define ERROR_GEN(msg) ERROR(KErrGeneral,msg)
hgs
parents: 18
diff changeset
   136
#define ERROR_GEN_1(msg,arg1) ERROR_1(KErrGeneral,msg,arg1)
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   137
40
hgs
parents: 18
diff changeset
   138
#else
18
578830873419 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   139
40
hgs
parents: 18
diff changeset
   140
#define NM_ERROR(err,msg)
hgs
parents: 18
diff changeset
   141
#define ERROR(err,msg)
hgs
parents: 18
diff changeset
   142
#define ERROR_1(err,msg,arg1)
hgs
parents: 18
diff changeset
   143
#define ERROR_2(err,msg,arg1,arg2)
hgs
parents: 18
diff changeset
   144
#define ERROR_3(err,msg,arg1,arg2,arg3)
hgs
parents: 18
diff changeset
   145
#define ERROR_GEN(msg)
hgs
parents: 18
diff changeset
   146
#define ERROR_GEN_1(msg,arg1)
18
578830873419 Revision: 201011
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents: 0
diff changeset
   147
40
hgs
parents: 18
diff changeset
   148
#endif /* ERROR_TRACES */
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   149
40
hgs
parents: 18
diff changeset
   150
/*
hgs
parents: 18
diff changeset
   151
 * The macro NM_FUNCTION, when used inside a function body, enables tracing
hgs
parents: 18
diff changeset
   152
 * for a function. Trace messages with labels ENTER and RETURN are printed
hgs
parents: 18
diff changeset
   153
 * when entering into and returning from a function, respectively. In case of
hgs
parents: 18
diff changeset
   154
 * an exception or a Symbian leave, a message with label UNWIND is printed
hgs
parents: 18
diff changeset
   155
 * (UNWIND stands for stack unwinding). The FUNC_LOG macro is provided for
hgs
parents: 18
diff changeset
   156
 * legacy compatibility. It is deprecated and should not be used.
hgs
parents: 18
diff changeset
   157
 */
hgs
parents: 18
diff changeset
   158
#if FUNCTION_TRACES
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   159
40
hgs
parents: 18
diff changeset
   160
class __ftracer
hgs
parents: 18
diff changeset
   161
{
hgs
parents: 18
diff changeset
   162
public:
hgs
parents: 18
diff changeset
   163
    __ftracer(const QString& _fn)
hgs
parents: 18
diff changeset
   164
    : fn(_fn)
hgs
parents: 18
diff changeset
   165
    {
hgs
parents: 18
diff changeset
   166
        print_trace("ENTER : " + fn);
hgs
parents: 18
diff changeset
   167
    }
hgs
parents: 18
diff changeset
   168
    ~__ftracer()
hgs
parents: 18
diff changeset
   169
    {
hgs
parents: 18
diff changeset
   170
        if (std::uncaught_exception()) {
hgs
parents: 18
diff changeset
   171
            print_trace("UNWIND : " + fn);
hgs
parents: 18
diff changeset
   172
        } else {
hgs
parents: 18
diff changeset
   173
            print_trace("RETURN : " + fn);
hgs
parents: 18
diff changeset
   174
        }
hgs
parents: 18
diff changeset
   175
    }
hgs
parents: 18
diff changeset
   176
private:
hgs
parents: 18
diff changeset
   177
    QString fn;
hgs
parents: 18
diff changeset
   178
};
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   179
40
hgs
parents: 18
diff changeset
   180
#define NM_FUNCTION __ftracer __ft(__PRETTY_FUNCTION__);
hgs
parents: 18
diff changeset
   181
#define FUNC_LOG NM_FUNCTION
hgs
parents: 18
diff changeset
   182
hgs
parents: 18
diff changeset
   183
#else
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   184
40
hgs
parents: 18
diff changeset
   185
#define NM_FUNCTION
hgs
parents: 18
diff changeset
   186
#define FUNC_LOG
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   187
40
hgs
parents: 18
diff changeset
   188
#endif /* FUNCTION TRACES */
0
8466d47a6819 Revision: 200949
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff changeset
   189
40
hgs
parents: 18
diff changeset
   190
#endif /* EMAILTRACE_H */