在运行时执行之前确定__PRETTY_FUNCTION__的值

时间:2011-07-20 17:07:06

标签: c++ c gcc

我在向日志文件报告消息(错误,警告等)时正在使用__PRETTY_FUNCTION__。这可以确保不会混淆哪个函数创建了错误消息。

目前,我想自动从日志文件中获取输出,并将其与最初创建它的代码链接起来。问题是,我无法确定将日志文件中的__PRETTY_FUNCTION__输出与代码中函数名称匹配的有效方法。

最初,我希望我可以使用gcc -E扩展所有宏常量/预处理器组件,并直接将日志文件的输出与原始代码进行比较。但是,__PRETTY_FUNCTION__不是宏常量 - 它显然是一个在运行时确定的变量。因此,gcc -E不起作用。

来自http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html

  

这些标识符不是预处理器宏。在GCC 3.3及更早版本中,   仅在C中,__FUNCTION____PRETTY_FUNCTION__被视为字符串   文字;它们可以用来初始化char数组,他们可以   与其他字符串文字连接。 GCC 3.4及以后的待遇   它们作为变量,如__func__。在C ++中,__FUNCTION__和   __PRETTY_FUNCTION__一直是变数。

关于如何有效地将__PRETTY_FUNCTION__的输出与原始代码中的函数进行匹配的任何想法?

2 个答案:

答案 0 :(得分:2)

__PRETTY_FUNCTION__通常与__FILE____LINE__一起使用,以识别源代码中的位置。

有关详细信息,请参阅Standard Predefined Macros

答案 1 :(得分:2)

使用__LINE____FILE__是一种简单且相对简单的解决方案。对日志函数的更改也应该在范围上相对较小。如果您想要代码覆盖率信息,最好使用GCOV。

http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/index.html#toc_Gcov

http://bobah.net/d4d/tools/code-coverage-with-gcov