【问题标题】:How to get the function name while in a function for debug strings?如何在调试字符串的函数中获取函数名称?
【发布时间】:2010-09-15 11:41:35
【问题描述】:

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

目前我正在做:

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

但我想要的是通用的:

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

【问题讨论】:

    标签: c++ debugging qt


    【解决方案1】:

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

    扩展为描述 宏所在的函数。如何 这个字符串看起来更具体的是 编译器依赖。使用 GNU GCC 它是 通常是函数签名, 而对于其他编译器,它可能是 行号和列号。

    【讨论】:

      【解决方案2】:

      __func__ 是 c99(这反过来意味着它可能无法与 Visual Studio 一起使用 - 但嘿,它是标准的 :o))

      __FUNCTION__ 几乎可以在任何地方使用

      __PRETTY_FUNCTION__ 是特定于 gnu 的,并返回带有(命名空间?)、类名、返回类型、函数名、参数列表的完整限定名

      【讨论】:

        【解决方案3】:

        如果您使用 gcc,您可能会发现__PRETTY_FUNCTION__ 更符合您的喜好。

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            "__FUNCTION__" 受 MSVC 和 GCC 支持,应该会为您提供所需的信息。

            【讨论】:

            • 没想到 MSVC 支持它
            • 从 VC7 开始支持。版本 6 不支持“FUNCTION
            猜你喜欢
            • 1970-01-01
            • 2022-11-20
            • 2018-08-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-09-09
            • 2011-01-10
            • 2014-05-23
            相关资源
            最近更新 更多