c++log 打印

2018-08-20 21:45:19 +08:00
 luohao0414

C++能实现 java 注解自动在函数入口和出口打 log 的功能么?

3146 次点击
所在节点    C
8 条回复
inoki
2018-08-20 22:35:09 +08:00
任意参数的函数对象
changnet
2018-08-20 22:56:40 +08:00
一般是利用对象的构造和析构函数打印,然后封装成一个宏,在函数入口处调用。

其他方式没见过,也不了解 java 的注解自动打印是什么样子的
mmdsun
2018-08-20 23:25:29 +08:00
不太了 c++解。c#支持 Attribute。相当于 Java 注解
gnaggnoyil
2018-08-20 23:31:31 +08:00
GCC 有`-finstrument-functions`可以用来挂钩子,配合 libdl 可以做 symbol translation 和 demangle.

其它 implementation 不清楚,不过无论如何这种需求都需要严重依赖于具体的 implementation,如果要在语言层面上正式直接实现这个需求,static reflection 加入标准之前想都别想
chengluyu
2018-08-20 23:35:03 +08:00
class AutoLogger {
const char *funcName_;
public:
AutoLogger(const char *funcName) : funcName_{ funcName } {
puts(funcName_);
}
~AutoLogger() {
puts(funcName_);
}
}

然后定义一个宏,用 __func__ 初始化 AutoLogger:

#define AUTO_LOGGER AutoLogger __you_will_never_use_this_name(__func__);

在要记录的函数开头加上 AUTO_LOGGER 就行了。
GeruzoniAnsasu
2018-08-21 00:24:11 +08:00
RAII 了解一下
类似 go 的 defer
MeteorCat
2018-08-21 01:37:43 +08:00
看堆栈不就行了吗?
cjw1115
2018-08-21 13:15:04 +08:00
@MeteorCat log 还是非常有必要的,堆栈不是什么时候都能看的吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481600

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX