1

我计划在我的软件中添加广泛的诊断功能。现在我正在考虑如何做到这一点的总体策略,因为只是临时添加这样的代码会导致严重的混乱。

你有这方面的经验吗?

我想监控:

  1. 创建所选子集中的对象的密集程度。
  2. 调用密集选择的方法的程度。
  3. 选定时间段内的其他事件数。
  4. 对于选定的方法,收集有关调用者的信息(libcwd 允许这样做吗?
  5. 每个线程在时间段序列中消耗的时间量。

我的软件是一个类似处理的工具,它通常像其他处理或计算工具一样工作,例如 lame mp3 编码器。这就是为什么这种整体统计数据收集对我来说确实有意义的原因。

我目前正计划为每个要监视创建/破坏的对象添加一个基类。基类将在其构造函数和析构函数中记录适当的信息。还能做什么??

class LifeCycleProbe {
    char * name;
    LifeCycleProbe(char * _name) : name(_name) {
       some::important::object.created(_name);
    }
    ~LifeCycleProbe() {
       some::important::object.destroyed(_name);
    }
}
class MonitorMe : private LifeCycleProbe {
    MonitorMe() : LifeCycleProbe("MonitorMe") {
        // ...
    }
}
4

4 回答 4

5

我能想到的第一件事是您可能可以很好地利用单独的分析工具。这也将消除更改源代码以允许它的需要。

我可以推荐的工具:

这些工具可以轻松帮助您找到所有问题的答案。

于 2009-07-08T13:28:41.843 回答
1

对那些建议使用外部分析器的人 +1。我只会在开发或测试周期中非常激烈的情况下绑定分析代码,绝对不会在生产代码库中。

那时,当我在 C++ 中工作时,有一个非常棒的工具,叫做 BugTrapper。大约 7 年前,他们是一家初创公司,他们制作的软件令人印象深刻。我认为从那时起他们已经成熟了很多,并且据我通过查看他们的网站可以看出,他们一直在做生意。曾经是很酷的东西,虽然我不知道它现在是什么样子。无论如何,在重新发明轮子之前尝试现成的解决方案是值得的。恕我直言。

于 2009-07-08T20:16:02.657 回答
0

这看起来像是一个好的分析器应该能够为您收集的东西,而无需更改您的源代码。

我使用 kprof 和 valgrind,也许这些工具可以帮助你。

于 2009-07-08T13:28:35.150 回答
0

这听起来像是 YAGNI 的经典案例——我建议首先将时间花在设计和正确编写软件上。

于 2009-07-08T14:00:27.513 回答