如何找到父函数的__FUNCTION __,_ _ _ 3和__FILE__?

时间:2017-02-09 11:18:09

标签: c

我只是愚弄自己:我想跟踪一个进程的执行,为了做到这一点,我编写了一个函数trace(),其中包含以下代码行:

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

我希望看到我在哪个函数,该文件中的文件和行,但我只是看到了我编写'trace()'函数的文件的信息。

是否有可能,是否有一些#define左右,告诉C编译器从调用函数的父代中获取所提到的宏?

2 个答案:

答案 0 :(得分:8)

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

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 :(得分:1)

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

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

H个