41
|
1 |
/*
|
|
2 |
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
|
|
3 |
* All rights reserved.
|
|
4 |
* This component and the accompanying materials are made available
|
|
5 |
* under the terms of "Eclipse Public License v1.0"
|
|
6 |
* which accompanies this distribution, and is available
|
|
7 |
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
|
|
8 |
*
|
|
9 |
* Initial Contributors:
|
|
10 |
* Nokia Corporation - initial contribution.
|
|
11 |
*
|
|
12 |
* Contributors:
|
|
13 |
*
|
|
14 |
* Description: Declaration and implementation of SIF trace macros
|
|
15 |
*
|
|
16 |
*/
|
|
17 |
|
|
18 |
|
|
19 |
// Additional Lint configuration options are defined here.
|
|
20 |
//lint -e1714 Member function not referenced.
|
|
21 |
// - CTFTestTimer, CTFActiveTest, copy constructors, assignment operators
|
|
22 |
//lint -e1526 Member function not defined.
|
|
23 |
// - Copy constructors, assignment operators
|
|
24 |
//lint -e714 Symbol not referenced
|
|
25 |
// - uid, LibEntryL
|
|
26 |
//lint -e1711 Class has a virtual function but is not inherited
|
|
27 |
// - Inherited in the project that implements the test cases
|
|
28 |
//lint -e755 Macro not referenced
|
|
29 |
// - Some trace macros
|
|
30 |
//lint -e769 Enumeration constant not referenced
|
|
31 |
// - Panic codes are not referenced in WINS
|
|
32 |
//lint -e1716 Virtual member function not referenced
|
|
33 |
// - Referenced b the project that implements the test cases
|
|
34 |
//lint -esym(960, 69) Variable number of arguments
|
|
35 |
// - Log writer functions contain ellipsis
|
|
36 |
//lint -esym(960, 54) Null statement by itself
|
|
37 |
// - When COMPONENT_TRACE is not enabled
|
|
38 |
//lint -esym(960, 59) Left brace expected for if, else, for, do and while
|
|
39 |
// - TRACE_ASSERT macro
|
|
40 |
//lint -e1924 C-style case
|
|
41 |
// - From _L macros
|
|
42 |
//lint -e666 Expression with side effects
|
|
43 |
// - From TEST_CASE_TRACE
|
|
44 |
|
|
45 |
#ifndef SIFTRACE_H
|
|
46 |
#define SIFTRACE_H
|
|
47 |
|
|
48 |
// INCLUDES
|
|
49 |
#include <e32svr.h>
|
|
50 |
|
|
51 |
// PC-LINT OPTIONS
|
|
52 |
// Removes null statement not in line by itself warnings from
|
|
53 |
// COMPONENT_TRACE macros
|
|
54 |
//lint -esym(960,54)
|
|
55 |
|
|
56 |
// Removes "area too small" pointer cast warnings.
|
|
57 |
//lint -e826
|
|
58 |
|
|
59 |
// Member function not referenced (copy constructors / assignment operators)
|
|
60 |
//lint -e1714
|
|
61 |
|
|
62 |
// Member function not defined (copy constructors / assignment operators)
|
|
63 |
//lint -e1526
|
|
64 |
|
|
65 |
// Global macro not referenced
|
|
66 |
//lint -e755
|
|
67 |
|
|
68 |
// Symbol not referenced (uid)
|
|
69 |
//lint -e714
|
|
70 |
|
|
71 |
// Global enumeration constant not referenced
|
|
72 |
//lint -e769
|
|
73 |
|
|
74 |
// Virtual member not referenced
|
|
75 |
//lint -e1716
|
|
76 |
|
|
77 |
// Expression with side effects passed to macro
|
|
78 |
//lint -e666
|
|
79 |
|
|
80 |
// Enumeration not referenced
|
|
81 |
//lint -e758
|
|
82 |
|
|
83 |
// Declaration could be moved from header to module
|
|
84 |
//lint -e759
|
|
85 |
|
|
86 |
|
|
87 |
// CONSTANTS
|
|
88 |
// MACROS
|
|
89 |
#ifdef _DEBUG
|
|
90 |
|
|
91 |
inline void TraceAssertFunc( const TDesC8& aFile, TInt aLine )
|
|
92 |
{
|
|
93 |
HBufC* buffer = HBufC::New( aFile.Length() + 1 );
|
|
94 |
HBufC* date = HBufC::New( 32 );
|
|
95 |
HBufC* time = HBufC::New( 32 );
|
|
96 |
if ( buffer != NULL && date != NULL && time != NULL )
|
|
97 |
{
|
|
98 |
buffer->Des().Copy( aFile );
|
|
99 |
date->Des().Copy( _L8( __DATE__ ) );
|
|
100 |
time->Des().Copy( _L8( __TIME__ ) );
|
|
101 |
RDebug::Print( _L( "Assertion failed: file=%s, line=%d, compiled=%s %s" ), buffer->Des().PtrZ(), aLine, date->Des().PtrZ(), time->Des().PtrZ() );
|
|
102 |
}
|
|
103 |
else
|
|
104 |
{
|
|
105 |
RDebug::Print( _L( "Assertion and memory allocation failed" ) );
|
|
106 |
}
|
|
107 |
delete buffer;
|
|
108 |
delete date;
|
|
109 |
delete time;
|
|
110 |
}
|
|
111 |
|
|
112 |
inline void ThisFileFunc( const TDesC8& aFile )
|
|
113 |
{
|
|
114 |
HBufC* buffer = HBufC::New( aFile.Length() + 1 );
|
|
115 |
HBufC* date = HBufC::New( 32 );
|
|
116 |
HBufC* time = HBufC::New( 32 );
|
|
117 |
if ( buffer != NULL && date != NULL && time != NULL )
|
|
118 |
{
|
|
119 |
buffer->Des().Copy( aFile );
|
|
120 |
date->Des().Copy( _L8( __DATE__ ) );
|
|
121 |
time->Des().Copy( _L8( __TIME__ ) );
|
|
122 |
RDebug::Print( _L( "File=%s, compiled=%s %s" ), buffer->Des().PtrZ(), date->Des().PtrZ(), time->Des().PtrZ() );
|
|
123 |
}
|
|
124 |
delete buffer;
|
|
125 |
delete date;
|
|
126 |
delete time;
|
|
127 |
}
|
|
128 |
|
|
129 |
|
|
130 |
//
|
|
131 |
// -----------------------------------------------------------------------------
|
|
132 |
// TracePanicFunc
|
|
133 |
// This method is needed to utilize debugging macros defined in dostrace.h.
|
|
134 |
// -----------------------------------------------------------------------------
|
|
135 |
//
|
|
136 |
inline void TracePanicFunc( const TDesC8& aFile, TInt aLine )
|
|
137 |
{
|
|
138 |
HBufC* buffer = HBufC::New( aFile.Length() + 1 );
|
|
139 |
HBufC* date = HBufC::New( 32 );
|
|
140 |
HBufC* time = HBufC::New( 32 );
|
|
141 |
if ( buffer != NULL && date != NULL && time != NULL )
|
|
142 |
{
|
|
143 |
buffer->Des().Copy( aFile );
|
|
144 |
date->Des().Copy( _L8( __DATE__ ) );
|
|
145 |
time->Des().Copy( _L8( __TIME__ ) );
|
|
146 |
RDebug::Print( _L( "Panic happened: file=%s, line=%d, compiled=%s %s" ), buffer->Des().PtrZ(), aLine, date->Des().PtrZ(), time->Des().PtrZ() );
|
|
147 |
}
|
|
148 |
else
|
|
149 |
{
|
|
150 |
RDebug::Print( _L( "Assertion and memory allocation failed" ) );
|
|
151 |
}
|
|
152 |
delete buffer;
|
|
153 |
delete date;
|
|
154 |
delete time;
|
|
155 |
|
|
156 |
User::Panic( _L( "[AccFW:AccServer]" ), KErrGeneral );
|
|
157 |
}
|
|
158 |
|
|
159 |
#define PANIC_IF_FALSE( a ) if ( !( a ) ) TracePanicFunc( _L8( __FILE__ ), __LINE__ )
|
|
160 |
#define PANIC_IF_TRUE( a ) if ( ( a ) ) TracePanicFunc( _L8( __FILE__ ), __LINE__ )
|
|
161 |
#define PANIC_ALWAYS() TracePanicFunc( _L8( __FILE__ ), __LINE__ )
|
|
162 |
|
|
163 |
#ifdef COMPONENT_TRACE_FLAG
|
|
164 |
|
|
165 |
#define COMPONENT_TRACE_THIS_FILE ThisFileFunc( _L8( __FILE__ ) )
|
|
166 |
|
|
167 |
#else //#ifdef COMPONENT_TRACE_FLAG
|
|
168 |
|
|
169 |
#define COMPONENT_TRACE_THIS_FILE
|
|
170 |
|
|
171 |
#endif //#ifdef COMPONENT_TRACE_FLAG
|
|
172 |
|
|
173 |
#define TRACE_ASSERT( a ) if ( !( a ) ) TraceAssertFunc( _L8( __FILE__ ), __LINE__ )
|
|
174 |
#define TRACE_ASSERT_RETURN( a ) if ( !( ( a ) == KErrNone ) ) TraceAssertFunc( _L8( __FILE__ ), __LINE__ )
|
|
175 |
#define TRACE_ASSERT_ALWAYS TraceAssertFunc( _L8( __FILE__ ), __LINE__ )
|
|
176 |
|
|
177 |
#ifdef COMPONENT_TRACE_FLAG
|
|
178 |
|
|
179 |
#define COMPONENT_TRACE( a ) RDebug::Print a
|
|
180 |
|
|
181 |
#else // #ifdef COMPONENT_TRACE_FLAG
|
|
182 |
|
|
183 |
#define COMPONENT_TRACE( a )
|
|
184 |
|
|
185 |
#endif //#ifdef COMPONENT_TRACE_FLAG
|
|
186 |
|
|
187 |
#ifdef TEST_CASE_TRACE_FLAG
|
|
188 |
|
|
189 |
#define TEST_CASE_TRACE( a ) RDebug::Print a
|
|
190 |
|
|
191 |
#else
|
|
192 |
|
|
193 |
#define TEST_CASE_TRACE( a )
|
|
194 |
|
|
195 |
#endif //#ifdef TEST_CASE_TRACE_FLAG
|
|
196 |
|
|
197 |
#ifdef API_TRACE_FLAG
|
|
198 |
|
|
199 |
#define API_TRACE( a ) RDebug::Print a
|
|
200 |
|
|
201 |
#else //#ifdef API_TRACE_FLAG
|
|
202 |
|
|
203 |
#define API_TRACE( a )
|
|
204 |
|
|
205 |
#endif //#ifdef API_TRACE_FLAG
|
|
206 |
|
|
207 |
#else // #ifdef _DEBUG
|
|
208 |
|
|
209 |
#define TRACE_ASSERT( a )
|
|
210 |
#define TRACE_ASSERT_RETURN( a ) a
|
|
211 |
#define TRACE_ASSERT_ALWAYS
|
|
212 |
#define TEST_CASE_TRACE( a )
|
|
213 |
#define COMPONENT_TRACE( a )
|
|
214 |
#define API_TRACE( a )
|
|
215 |
#define COMPONENT_TRACE_THIS_FILE
|
|
216 |
|
|
217 |
#endif //#ifdef _DEBUG
|
|
218 |
|
|
219 |
|
|
220 |
|
|
221 |
// DATA TYPES
|
|
222 |
// FUNCTION PROTOTYPES
|
|
223 |
// FORWARD DECLARATIONS
|
|
224 |
|
|
225 |
#endif //#ifndef ccftrace.h
|
|
226 |
|
|
227 |
// End of File
|