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

wsxa1bj1  于 2023-08-06  发布在  其他
关注(0)|答案(6)|浏览(114)

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

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

字符串
但我想要的是一些通用的东西

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

watbbzwu

watbbzwu1#

MSVC和GCC都支持“__FUNCTION__“,应该可以给予所需的信息。

lg40wkob

lg40wkob2#

我从你的例子中看到你正在使用Qt。在这种情况下,最好的选择是使用<QGlobal>中的Q_FUNC_INFO。以下是描述:
扩展为描述宏所在函数的字符串。此字符串的具体外观取决于编译器。对于GNU GCC,它通常是函数签名,而对于其他编译器,它可能是行号和列号。

knsnq2tg

knsnq2tg3#

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

bxjv4tth

bxjv4tth4#

**__func__**是c99(这意味着它可能不适用于visual studio -但它是标准的:o))
**__FUNCTION__**几乎在任何地方都可以工作
**__PRETTY_FUNCTION__**是特定于gnu的,返回完整的限定名(namespaces?)、classname、returntype、functionname、parametersList

jhiyze9q

jhiyze9q5#

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

monwx1rj

monwx1rj6#

如果你使用的是c++20,你可以在命名空间std::source_locationlink中调用方法function_name()

#include <cstdio>
#include <source_location>

void foo(double &&) { 
    auto cc=std::source_location::current().function_name();
    std::puts(cc);  
}
 
int main(int, char const* const[])
{
    foo(42);
}

字符串
works on gcc 11.1

相关问题