48 # define KLF_SHORT_TIME qPrintable(klfTimeOfDay())
50 # define KLF_SHORT_TIME (klfTimeOfDay().ascii())
75 #ifndef KLFBACKEND_QT4
76 class KLF_EXPORT __klf_dbg_string_obj {
79 __klf_dbg_string_obj(
const QString& h) : hdr(h) { }
80 __klf_dbg_string_obj(
const __klf_dbg_string_obj& other) : hdr(other.hdr) { }
81 int operator=(
const QString& msg);
85 class KLFDebugObjectWatcherPrivate;
87 class KLF_EXPORT KLFDebugObjectWatcher :
public QObject
91 static KLFDebugObjectWatcher *getWatcher();
93 void registerObjectRefInfo(
QObject *
object,
const QString& refInfo);
95 void debugObjectDestroyedFromSender() { debugObjectDestroyed(const_cast<QObject*>(
sender())); }
96 void debugObjectDestroyed(
QObject *
object);
99 KLFDebugObjectWatcher();
100 virtual ~KLFDebugObjectWatcher();
101 static KLFDebugObjectWatcher *instance;
103 KLFDebugObjectWatcherPrivate *p;
107 #ifdef KLFBACKEND_QT4
114 inline const T& __klf_debug_tee(
const T& expr)
115 # ifdef KLFBACKEND_QT4
116 { qDebug()<<
"TEE VALUE: "<<expr;
return expr; }
122 # ifdef KLFBACKEND_QT4
124 __klf_dbg_hdr(QDebug dbg,
const char * funcname,
const char *refinstance,
const char * shorttime);
126 KLF_EXPORT __klf_dbg_string_obj
127 __klf_dbg_hdr_qt3(
const char *funcname,
const char *refinstance,
const char *shorttime) ;
131 # define KLF_DEBUG_DECLARE_REF_INSTANCE( expr ) \
132 protected: inline QString __klf_debug_ref_instance() const { return QString("[")+ (expr) + "]" ; }
134 # define KLF_DEBUG_DECLARE_ASSIGNABLE_REF_INSTANCE() \
135 public: QString __klf_debug_this_ref_instance; \
136 protected: inline QString __klf_debug_ref_instance() const { return __klf_debug_this_ref_instance; }
137 # define KLF_DEBUG_ASSIGN_REF_INSTANCE(object, ref_instance) \
138 (object)->__klf_debug_this_ref_instance = QString("[%1]").arg((ref_instance))
139 # define KLF_DEBUG_ASSIGN_SAME_REF_INSTANCE(object) \
140 (object)->__klf_debug_this_ref_instance = __klf_debug_ref_instance();
142 # define KLF_DEBUG_TIME_BLOCK(msg) KLFDebugBlockTimer __klf_debug_timer_block(QString("")+msg)
143 # define KLF_DEBUG_BLOCK(msg) KLFDebugBlock __klf_debug_block(QString("")+msg)
144 # define KLF_DEBUG_TEE(expr) __klf_debug_tee(expr)
145 # ifdef KLFBACKEND_QT4
146 # define klfDbg( streamableItems ) \
147 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, qPrintable(__klf_debug_ref_instance()), NULL) << streamableItems
148 # define klfDbgT( streamableItems ) \
149 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, qPrintable(__klf_debug_ref_instance()), KLF_SHORT_TIME) << streamableItems
150 # define klfDbgSt( streamableItems ) \
151 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, NULL, NULL) << streamableItems
152 # define klfDbgStT( streamableItems ) \
153 __klf_dbg_hdr(qDebug(), KLF_FUNC_NAME, NULL, KLF_SHORT_TIME) << streamableItems
155 # define klfDbg( string ) \
156 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, __klf_debug_ref_instance().local8Bit(), NULL) = QString("") + (string)
157 # define klfDbgT( string ) \
158 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, __klf_debug_ref_instance().local8Bit(), KLF_SHORT_TIME) = QString("") + (string)
159 # define klfDbgSt( string ) \
160 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, NULL, NULL) = QString("") + (string)
161 # define klfDbgStT( string ) \
162 __klf_dbg_hdr_qt3(KLF_FUNC_NAME, NULL, KLF_SHORT_TIME) = QString("") + (string)
165 # define KLF_DEBUG_WATCH_OBJECT( qobj ) \
166 { KLFDebugObjectWatcher::getWatcher()->registerObjectRefInfo((qobj), #qobj) ; \
167 connect((qobj), SIGNAL(destroyed()), \
168 KLFDebugObjectWatcher::getWatcher(), SLOT(debugObjectDestroyedFromSender())); \
176 # define KLF_DEBUG_DECLARE_REF_INSTANCE( expr )
177 # define KLF_DEBUG_DECLARE_ASSIGNABLE_REF_INSTANCE()
178 # define KLF_DEBUG_ASSIGN_REF_INSTANCE(object, ref_instance)
179 # define KLF_DEBUG_ASSIGN_SAME_REF_INSTANCE(object)
182 # define KLF_DEBUG_TIME_BLOCK(msg)
183 # define KLF_DEBUG_BLOCK(msg)
185 # define KLF_DEBUG_TEE(expr) (expr)
187 # define klfDbg( streamableItems )
188 # define klfDbgT( streamableItems )
189 # define klfDbgSt( streamableItems )
190 # define klfDbgStT( streamableItems )
192 # define KLF_DEBUG_WATCH_OBJECT( qobj )
199 #if defined(__STDC_VERSION__) && __STDC_VERSION__ < 199901L
200 # if defined(__GNUC__) && __GNUC__ >= 2
201 # define __func__ __FUNCTION__
203 # ifdef KLFBACKEND_QT4
204 # define __func__ (qPrintable(QString("<in %2 line %1>").arg(__LINE__).arg(__FILE__)))
206 # define __func__ (QString("<in %2 line %1>").arg(__LINE__).arg(__FILE__).ascii().data())
211 #ifndef KLF_FUNC_NAME
212 # if (defined(Q_CC_GNU) && !defined(Q_OS_SOLARIS)) || defined(Q_CC_HPACC) || defined(Q_CC_DIAB)
213 # define KLF_FUNC_NAME (klfShortFuncSignature(__PRETTY_FUNCTION__).data())
214 # elif defined(_MSC_VER)
216 # if _MSC_VER <= 1300
217 # define KLF_FUNC_NAME __func__
219 # define KLF_FUNC_NAME (klfShortFuncSignature(__FUNCSIG__).data())
222 # define KLF_FUNC_NAME __func__
229 #ifdef KLFBACKEND_QT4
230 #define KLF_ASSERT_CONDITION(expr, msg, failaction) \
232 qWarning().nospace()<<"In function "<<KLF_FUNC_NAME<<":\n\t"<<msg; \
236 #define KLF_ASSERT_CONDITION(expr, msg, failaction) \
238 qWarning("In function %s:\n\t%s", KLF_FUNC_NAME, (QString("")+msg).local8Bit().data()); \
242 #define KLF_ASSERT_CONDITION_ELSE(expr, msg, failaction) \
243 KLF_ASSERT_CONDITION(expr, msg, failaction) \
245 #define KLF_ASSERT_NOT_NULL(ptr, msg, failaction) \
246 KLF_ASSERT_CONDITION((ptr) != NULL, msg, failaction)
251 #if defined(KLFBACKEND_QT4) && defined(QT_NO_DEBUG_OUTPUT)
253 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.