我刚刚出丑了:我想跟踪一个进程的执行情况,为了做到这一点,我编写了一个函数
trace()
,其中包含以下代码行:
printf("%s[%s:%d], %s\n", __FUNCTION__, __FILE__, __LINE__, s_message);
我希望看到我在哪个函数中,哪个文件以及该文件中的哪一行,但我只看到了我编写该
trace()
函数的文件的信息。
是否有可能,是否有一些
#define
左右,告诉C编译器从调用函数的父函数中获取提到的宏?
您需要将其包装在宏中,例如:
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))
正如其他人所说,您应该有一个宏。 原因是所有 3 个使用的宏在编译的预处理阶段都被扩展,并且它们将被遇到的相应信息替换。这就是您的实际输出是实现
trace()
的原因。
您可以更改当前的
trace()
实现以接收函数名称、文件和行的 const char *
。然后,有一个宏,例如 mTrace
,它扩展为调用初始跟踪函数,并精确传递 __FUNCTION__,__FILE__, __LINE__
。当然,您的mTrace
可以获取另一个参数,即您要添加的实际消息,并将其进一步传递给trace()
。
Hth