![]() |
1
10
输入法你不能真的把日志和你想记录的算法分开。战略性地放置日志语句 需要时间和经验 . 通常,代码在其整个生命周期内(尽管是渐进的)一直在组装日志语句。通常 日志记录随代码发展 . 如果算法经常更改,那么日志代码也会经常更改。 你能做的就是把日志作为 不引人注目 尽可能的。也就是说,确保日志语句始终是不干扰读取算法的一个内衬,使得其他人可以在不必完全理解日志库的情况下,将附加日志语句插入到现有算法中。 简而言之, 对待日志就像对待字符串处理一样 :将它包装在一个很好的小lib中,这个小lib将包含在几乎所有地方并在其中使用,使这个lib变得快速,并且易于使用。 |
![]() |
2
5
不是真的。 如果有可变宏可用,则可以轻松地玩以下游戏:
您还可以在更细的粒度上关闭和启用日志记录:
显然,如果只允许每个函数返回一次,这可能会有点乏味,因为您无法直接获取函数返回。
任何宏和调用
ASPECTC.ORG声称提供了一个支持AOP的语言扩展的C和C++编译器。我不知道它是什么状态,如果你使用它,当然你就不再真正编写C(或C++)了。 请记住,C++具有多重继承性,这有时有助于横切关注点。有了足够的模板,您可以做一些了不起的事情,甚至可以实现您自己的方法分派系统,允许某种类型的连接点,但这是一件大事。 |
![]() |
3
4
在GCC上,可以使用可变宏:
http://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html
. 有可能定义
使用附加隐藏
在这种情况下,日志loggic将只包含
不需要将它与其他代码分离。 |
![]() |
4
1
标记和适当的逻辑可能是更安全的方法,但是在编译类型上也可以这样做。即使用define和ifdef来包含/排除printfs。 |
![]() |
5
1
嗯,这听起来像去年夏天我在C++项目上遇到的一个问题。它是一个分布式应用程序,必须是绝对防弹的,这导致了烦人的异常处理膨胀负载。当您添加一两个异常时,一个10行函数的大小将增加一倍,因为每个函数都涉及从loong异常字符串加上任何相关参数构建stringstream,然后在5行之后实际抛出异常。
因此,我最终构建了一个小型异常处理框架,这意味着我可以将所有异常消息集中在一个类中。我会在启动时用我的(可能是参数化的)消息初始化该类,这允许我编写如下内容
|
![]() |
6
0
这个
这个
如果你不想那么花哨,你可以不用调试级的部分。这就使得如果你想的话,你可以改变你想要的调试/跟踪日期的级别。 您可以将整个print语句转换为一个单独的函数(内联或常规函数),不管调试级别如何,都将调用该函数,并决定是否在内部进行打印。
如果你使用的是*nix系统,那么你应该看看
您可能还需要搜索一些跟踪库。有一些人做了与我所描述的类似的事情。 |
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 4 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |