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

3ks5zfa0  于 2023-11-16  发布在  其他
关注(0)|答案(2)|浏览(141)

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

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

字符串
我希望看到我在哪个函数中,什么文件以及该文件中的哪一行,但我只看到了我编写trace()函数的文件的信息。
有没有可能,有没有一些#define之类的东西,告诉C编译器从调用函数的父函数中获取上面提到的宏?

relj7zay

relj7zay1#

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

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))

字符串

vqlkdk9b

vqlkdk9b2#

正如其他人所说的,你应该有一个宏来完成这个任务。这样做的原因是所有3个使用的宏在编译的预处理阶段都会被扩展,当遇到它们时,它们会被相应的信息替换。这就是为什么你的实际输出是在trace()实现的地方。
您可以更改当前的trace()实现,以接收const char *的函数名、文件和行。然后,有一个宏,比如mTrace,它扩展到调用初始跟踪函数,精确地传递__FUNCTION__,__FILE__, __LINE__。当然,您的mTrace可以获取另一个参数,即您想要添加的实际消息,并将其进一步传递给trace()

相关问题