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.