49 # define KLF_SHORT_TIME qPrintable(klfTimeOfDay())
51 # define KLF_SHORT_TIME (klfTimeOfDay().ascii())
76 #ifndef KLFBACKEND_QT4
77 class KLF_EXPORT __klf_dbg_string_obj {
80 __klf_dbg_string_obj(
const QString& h) : hdr(h) { }
81 __klf_dbg_string_obj(
const __klf_dbg_string_obj& other) : hdr(other.hdr) { }
82 int operator=(
const QString& msg);
86 class KLFDebugObjectWatcherPrivate;
88 class KLF_EXPORT KLFDebugObjectWatcher :
public QObject
92 static KLFDebugObjectWatcher *getWatcher();
94 void registerObjectRefInfo(
QObject *
object,
const QString& refInfo);
96 void debugObjectDestroyedFromSender() { debugObjectDestroyed(const_cast<QObject*>(
sender())); }
97 void debugObjectDestroyed(
QObject *
object);
100 KLFDebugObjectWatcher();
101 virtual ~KLFDebugObjectWatcher();
102 static KLFDebugObjectWatcher *instance;
104 KLFDebugObjectWatcherPrivate *p;
108 #ifdef KLFBACKEND_QT4
115 inline const T& __klf_debug_tee(
const T& expr)
116 # ifdef KLFBACKEND_QT4
117 { qDebug()<<
"TEE VALUE: "<<expr;
return expr; }
123 # ifdef KLFBACKEND_QT4
125 __klf_dbg_hdr(QDebug dbg,
const char * funcname,
const char *refinstance,
const char * shorttime);
127 KLF_EXPORT __klf_dbg_string_obj
128 __klf_dbg_hdr_qt3(
const char *funcname,
const char *refinstance,
const char *shorttime) ;
132 # define KLF_DEBUG_DECLARE_REF_INSTANCE( expr ) \
133 protected: inline QString __klf_debug_ref_instance() const { return QString("[")+ (expr) + "]" ; }
135 # define KLF_DEBUG_DECLARE_ASSIGNABLE_REF_INSTANCE() \
136 public: QString __klf_debug_this_ref_instance; \
137 protected: inline QString __klf_debug_ref_instance() const { return __klf_debug_this_ref_instance; }
138 # define KLF_DEBUG_ASSIGN_REF_INSTANCE(object, ref_instance) \
139 (object)->__klf_debug_this_ref_instance = QString("[%1]").arg((ref_instance))
140 # define KLF_DEBUG_ASSIGN_SAME_REF_INSTANCE(object) \
141 (object)->__klf_debug_this_ref_instance = __klf_debug_ref_instance();
143 # define KLF_DEBUG_TIME_BLOCK(msg) KLFDebugBlockTimer __klf_debug_timer_block(QString("")+msg)
144 # define KLF_DEBUG_BLOCK(msg) KLFDebugBlock __klf_debug_block(QString("")+msg)
145 # define KLF_DEBUG_TEE(expr) __klf_debug_tee(expr)
146 # ifdef KLFBACKEND_QT4
147 # define klfDbg( streamableItems ) \
148 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, qPrintable(__klf_debug_ref_instance()), NULL) << streamableItems
149 # define klfDbgT( streamableItems ) \
150 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, qPrintable(__klf_debug_ref_instance()), KLF_SHORT_TIME) << streamableItems
151 # define klfDbgSt( streamableItems ) \
152 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, NULL, NULL) << streamableItems
153 # define klfDbgStT( streamableItems ) \
154 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, NULL, KLF_SHORT_TIME) << streamableItems
156 # define klfDbg( string ) \
157 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, __klf_debug_ref_instance().local8Bit(), NULL) = QString("") + (string)
158 # define klfDbgT( string ) \
159 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, __klf_debug_ref_instance().local8Bit(), KLF_SHORT_TIME) = QString("") + (string)
160 # define klfDbgSt( string ) \
161 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, NULL, NULL) = QString("") + (string)
162 # define klfDbgStT( string ) \
163 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, NULL, KLF_SHORT_TIME) = QString("") + (string)
166 # define KLF_DEBUG_WATCH_OBJECT( qobj ) \
167 { KLFDebugObjectWatcher::getWatcher()->registerObjectRefInfo((qobj), #qobj) ; \
168 connect((qobj), SIGNAL(destroyed()), \
169 KLFDebugObjectWatcher::getWatcher(), SLOT(debugObjectDestroyedFromSender())); \
177 # define KLF_DEBUG_DECLARE_REF_INSTANCE( expr )
178 # define KLF_DEBUG_DECLARE_ASSIGNABLE_REF_INSTANCE()
179 # define KLF_DEBUG_ASSIGN_REF_INSTANCE(object, ref_instance)
180 # define KLF_DEBUG_ASSIGN_SAME_REF_INSTANCE(object)
183 # define KLF_DEBUG_TIME_BLOCK(msg)
184 # define KLF_DEBUG_BLOCK(msg)
186 # define KLF_DEBUG_TEE(expr) (expr)
188 # define klfDbg( streamableItems )
189 # define klfDbgT( streamableItems )
190 # define klfDbgSt( streamableItems )
191 # define klfDbgStT( streamableItems )
193 # define KLF_DEBUG_WATCH_OBJECT( qobj )
200 #if defined(__STDC_VERSION__) && __STDC_VERSION__ < 199901L
201 # if defined(__GNUC__) && __GNUC__ >= 2
202 # define __func__ __FUNCTION__
204 # ifdef KLFBACKEND_QT4
205 # define __func__ (qPrintable(QString("<in %2 line %1>").arg(__LINE__).arg(__FILE__)))
207 # define __func__ (QString("<in %2 line %1>").arg(__LINE__).arg(__FILE__).ascii().data())
212 #ifndef KLF_FUNC_NAME
213 # if (defined(Q_CC_GNU) && !defined(Q_OS_SOLARIS)) || defined(Q_CC_HPACC) || defined(Q_CC_DIAB)
214 # define KLF_FUNC_NAME (klfShortFuncSignature(__PRETTY_FUNCTION__).data())
215 # elif defined(_MSC_VER)
217 # if _MSC_VER <= 1300
218 # define KLF_FUNC_NAME __func__
220 # define KLF_FUNC_NAME (klfShortFuncSignature(__FUNCSIG__).data())
223 # define KLF_FUNC_NAME __func__
230 #ifdef KLFBACKEND_QT4
231 #define KLF_ASSERT_CONDITION(expr, msg, failaction) \
233 qWarning().nospace()<<"In function "<<KLF_FUNC_NAME<<":\n\t"<<msg; \
237 #define KLF_ASSERT_CONDITION(expr, msg, failaction) \
239 qWarning("In function %s:\n\t%s", KLF_FUNC_NAME, (QString("")+msg).local8Bit().data()); \
243 #define KLF_ASSERT_CONDITION_ELSE(expr, msg, failaction) \
244 KLF_ASSERT_CONDITION(expr, msg, failaction) \
246 #define KLF_ASSERT_NOT_NULL(ptr, msg, failaction) \
247 KLF_ASSERT_CONDITION((ptr) != NULL, msg, failaction)
252 #if defined(KLFBACKEND_QT4) && defined(QT_NO_DEBUG_OUTPUT)
254 inline QDebug& operator<<(QDebug& str,
const QVariant& v) {
return str; }
Base declarations for klatexformula and some utilities.
Utility to time the execution of a block.
KLF_EXPORT QString klfTimeOfDay(bool shortFmt=true)
QByteArray klfShortFuncSignature(const char *fullFuncName)
An extension of KLFDebugBlock with millisecond-time display.