我在向日志文件报告消息(错误,警告等)时正在使用__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__
的输出与原始代码中的函数进行匹配的任何想法?
答案 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