自动插入文件名& C程序的日志记录语句中的行号

时间:2014-05-28 15:50:27

标签: c debugging gcc arm c-preprocessor

我正在 C 编写嵌入式ARM处理器的程序。我想在日志记录语句中看到源文件名和行号。

由于编译后的代码不知道行号和源文件,我正在寻找在编译过程之前/期间自动插入的方法。

我可以使用任何标准工具或编译器功能吗?

我正在使用GCC。

例如:

这就是我在源文件中写的内容:

log("<#filename#> <#linenumber#> : Hello World");

这是实际编译的内容:

log("Foobar.c 225 : Hello World");

2 个答案:

答案 0 :(得分:4)

通常你会做这样的事情:

// logging function
void log(const char * file, const int line, const char *msg)
{
    fprintf(stderr, "%s:%d: %s\n", file, line, msg);
}

// logging macro - passes __FILE__ and __LINE__ to logging function
#define LOG(msg) do { log(__FILE__, __LINE__, msg) } while (0)

然后当你想记录某事时:

LOG("We made it to this point!");
然后

将生成一条日志消息,例如:

foo.c:42: We made it to this point!

答案 1 :(得分:1)

作为预处理器的一部分,有一组标准的预定义宏:https://gcc.gnu.org/onlinedocs/gcc-4.9.0/cpp/Standard-Predefined-Macros.html

您要使用的宏是__FILE____LINE__,它们是文件名和行号。