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

标签 c debugging gcc arm c-preprocessor

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

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

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

我正在使用 GCC。

例如:

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

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

这是实际编译的内容:

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

最佳答案

通常你会做这样的事情:

// 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!

关于c - 在 C 程序的日志语句中自动插入文件名和行号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23916351/

相关文章:

c++ - 求数字平方根的程序

c - 使用 putchar() 和 getchar() 打印单个字符

c++ - cmake - undefined reference

在Ubuntu上编译动态链接库并获得无法识别的调试输出级别

c - 信号 "auto-block"(当执行进入处理程序函数时)是否会阻止另一个此类信号传递到另一个线程?

java - 调试时如何进入Android操作系统的源代码?

java - 使用 jboss 进行 Eclipse 远程调试

php - 如何在 PHP 中获取有用的错误消息?

c - GCC 返回优化

c - 使用 gcc "define but not used"说明符时收到 "__thread"警告