如何找到父函数的__FUNCTION__、__LINE__和__FILE__?
How to find __FUNCTION__, __LINE__ and __FILE__ of parent function?
我开玩笑了:我想跟踪一个进程的执行,为此,我写了一个函数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 个使用的宏在 pre-processing 编译阶段被扩展,并且它们将被相应的信息替换,因为它是遇到的。这就是您的实际输出是实施 trace()
的原因。
您可以更改当前的 trace()
实现以接收 const char *
函数名称、文件和行。然后,有一个宏,比如 mTrace
,它扩展为调用初始跟踪函数,正好传递 __FUNCTION__,__FILE__, __LINE__
。当然,您的 mTrace
可以获得另一个参数,即您要添加的实际消息,并将其进一步传递给 trace()
。
Hth
我开玩笑了:我想跟踪一个进程的执行,为此,我写了一个函数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 个使用的宏在 pre-processing 编译阶段被扩展,并且它们将被相应的信息替换,因为它是遇到的。这就是您的实际输出是实施 trace()
的原因。
您可以更改当前的 trace()
实现以接收 const char *
函数名称、文件和行。然后,有一个宏,比如 mTrace
,它扩展为调用初始跟踪函数,正好传递 __FUNCTION__,__FILE__, __LINE__
。当然,您的 mTrace
可以获得另一个参数,即您要添加的实际消息,并将其进一步传递给 trace()
。
Hth