在 C 程序的日志语句中自动插入文件名和行号

Doj*_*ojo 1 c debugging gcc arm c-preprocessor

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

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

是否有任何标准工具或编译器功能可供我使用?

我正在使用海湾合作委员会。

例如:

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

log("<#filename#> <#linenumber#> : Hello World");
Run Code Online (Sandbox Code Playgroud)

这是实际编译的内容:

log("Foobar.c 225 : Hello World");
Run Code Online (Sandbox Code Playgroud)

Pau*_*l R 6

通常你会这样做:

// 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)
Run Code Online (Sandbox Code Playgroud)

然后当你想记录一些东西时:

LOG("We made it to this point!");
Run Code Online (Sandbox Code Playgroud)

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

foo.c:42: We made it to this point!
Run Code Online (Sandbox Code Playgroud)