如何找到父函数的__FUNCTION__、__LINE__和__FILE__?

问题描述 投票:0回答:2

我刚刚出丑了:我想跟踪一个进程的执行情况,为了做到这一点,我编写了一个函数

trace()
,其中包含以下代码行:

printf("%s[%s:%d], %s\n", __FUNCTION__, __FILE__, __LINE__, s_message);

我希望看到我在哪个函数中,哪个文件以及该文件中的哪一行,但我只看到了我编写该

trace()
函数的文件的信息。

是否有可能,是否有一些

#define
左右,告诉C编译器从调用函数的父函数中获取提到的宏?

c preprocessor-directive
2个回答
11
投票

您需要将其包装在宏中,例如:

void _trace(char const *function, 
            char const *file, 
            long line, 
            char const *message) 
{
    printf("%s[%s:%ld], %s\n", function, file, line, message);
}

#define trace(message) _trace(__FUNCTION__, __FILE__, __LINE__, (message))

1
投票

正如其他人所说,您应该有一个宏。 原因是所有 3 个使用的宏在编译的预处理阶段都被扩展,并且它们将被遇到的相应信息替换。这就是您的实际输出是实现

trace()
的原因。

您可以更改当前的

trace()
实现以接收函数名称、文件和行的
const char *
。然后,有一个宏,例如
mTrace
,它扩展为调用初始跟踪函数,并精确传递
__FUNCTION__,__FILE__, __LINE__
。当然,您的
mTrace
可以获取另一个参数,即您要添加的实际消息,并将其进一步传递给
trace()

Hth

© www.soinside.com 2019 - 2024. All rights reserved.