【发布时间】:2023-03-25 04:18:01
【问题描述】:
我正在编写一个记录器,我希望记录器还记录调用它的行、函数和文件。我已经尝试过#define my_logger(format, ...) _log(format, __LINE__, __PRETTY_FUNCTION__, __FILE__, __VA_ARGS__),但是它可以工作,这给我带来了几个问题(我不能轻易地重载它,我不能把它放在一个命名空间中,不是最便携的等等)。
有没有一种方法可以声明像void my_logger(const char* format, ...) 这样的普通函数,并且在函数定义中让它知道从与__LINE_FUNCTION_WAS_CALLED_FROM__ 等效的东西调用它的行(如果存在这样的宏)?至少它需要在 GCC 上运行,并且确实应该是跨平台的。
编辑:我所说的跨平台是指 x86 和 ARM 上的 Linux 和 Windows
【问题讨论】:
-
@Chipster 我不想使用堆栈跟踪,因为我希望记录器即使在发布版本中也能获得信息,并且我不希望堆栈跟踪的开销
-
这是有道理的。我不认为这正是你想要的,但我只是想我会提到它,因为如果需要的话,你应该能够以这种方式完成同样的事情。当然,这种方式无论如何也不能跨平台移植。
-
你能负担多少年的工作花费在你的项目上?