我正在 C 编写嵌入式ARM处理器的程序。我想在日志记录语句中看到源文件名和行号。
由于编译后的代码不知道行号和源文件,我正在寻找在编译过程之前/期间自动插入的方法。
我可以使用任何标准工具或编译器功能吗?
我正在使用GCC。
例如:
这就是我在源文件中写的内容:
log("<#filename#> <#linenumber#> : Hello World");
这是实际编译的内容:
log("Foobar.c 225 : Hello World");
答案 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__
,它们是文件名和行号。