如何在调试字符串的函数中获取函数名称?

时间:2008-10-06 10:31:53

标签: c++ debugging qt

我想在每次调用时输出函数名称,我可以轻松地复制并粘贴函数名称,但是我想知道是否有一个快捷方式可以帮我完成工作?

我正在做的那一刻:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
    qDebug("lynxThreeFile::readSlideInfoHeader");
} 

但我想要的是通用的东西:

SlideInfoHeader* lynxThreeFile::readSlideInfoHeader(QDataStream & in)
{
    qDebug(this.className() + "::" + this.functionName());
}

5 个答案:

答案 0 :(得分:27)

MSVC和GCC都支持“__FUNCTION__”,并且应该为您提供所需的信息。

答案 1 :(得分:13)

我从您的示例中看到您正在使用Qt。在这种情况下,最好的办法是使用Q_FUNC_INFO中的<QGlobal>。这是描述:

  

扩展为描述。的字符串   函数宏驻留在。如何   这个字符串看起来更具体   编译器依赖。有了GNU GCC,它就是   通常是功能签名,   与其他编译器一样,它可能是   行号和列号。

答案 2 :(得分:8)

如果您使用的是gcc,您可以根据自己的喜好找到__PRETTY_FUNCTION__

答案 3 :(得分:5)

如果你查看了boost,那么可以跨平台移植一个宏BOOST_CURRENT_FUNCTION。在C99标准中,存在具有期望效果的编译器变量__func__。我相信已被C ++ 0x标准所接受。合理数量的编译器已经支持这一点。

答案 4 :(得分:5)

__func__ 是c99(这反过来意味着它可能不适用于visual studio - 但它是标准的:o))

__FUNCTION__ 几乎无处不在

__PRETTY_FUNCTION__ 是特定于gnu并返回完整限定名称(名称空间?),classname,returntype,functionname,parameterslist