我正在Qt中为一个项目编写一个调试类,我想知道我现在写的是哪个类:
MyClass::function1()
{
DEBUG_IN("[MyClass] Enters function1()")
....do something
DEBUG_OUT("[MyClass] Exits function1()");
}
编辑: DEBUG_IN()
和DEBUG_OUT()
是全局函数。它们不属于MyClass类
是否可以获取调用DEBUG()的类的名称?
(以及调用DEBUG()的函数的bame?)
所以我可以这样做:
MyClass::function1()
{
DEBUG_IN("function1()")
....do something
DEBUG_OUT("function1()");
}
和
DEBUG_IN(QString text)
{
qDebug() << qPrintable("[")
<< qPrintable(getClassName())
<< qPrintable("] Enters ")
<< qPrintable(text);
}
很多
答案 0 :(得分:2)
最接近您想要的是__PRETTY_FUNCTION__
。这包括完全限定的函数名称和签名。
编辑:
您应该像这样使用它:
#define DEBUG_IN_PRETTY(...) DEBUG_IN(__PRETTY_FUNCTION__, __VA_ARGS__)
然后调用DEBUG_IN_PRETTY
(显然DEBUG_IN
需要采取额外的参数)。这将扩展呼叫站点的宏。
答案 1 :(得分:2)
确实存在。
typeid(*this).name()
会给你一个可读的类名。未指定如何构造此名称,因此您的编译器可能不会提供确切的类名,但它应该适合于调试目的。
由于DEBUG_IN和DEBUG_OUT是自由函数,因此需要将类类型作为参数传递。一个简单的模板应该可以做到这一点
template<typename CLASSNAME>
void DEBUG_IN(QString msg, CLASSNAME* that)
{
... typeid(*that).name()
}