C ++运行时调试(诊断策略和构造)

时间:2009-07-08 13:24:51

标签: c++ multithreading debugging logging diagnostics

我打算在我的软件中添加广泛的诊断功能。现在我正在考虑如何做到这一点的总体策略,因为简单地添加这样的代码会导致严重的混乱。

你对此有什么经验吗?

我想要监控:

  1. 创建选定子集的对象的密集程度。
  2. 如何选择密集选择的方法。
  3. 选定时间段内的其他活动数量。
  4. 对于选定的方法,请收集有关来电者的信息(libcwd allows this?
  5. 每个线程按时间段消耗的时间量。
  6. 我的软件是类似处理的工具,通常像其他处理或计算工具一样工作,例如lame mp3 encoder。这就是为什么这样的整体统计数据收获对我有意义。

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

    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 个答案:

答案 0 :(得分:5)

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

我可以推荐的工具:

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

答案 1 :(得分:1)

+1表示外部探查器的人。 我只在开发或测试周期的非常激烈的情况下绑定分析代码,并且绝对不在生产代码库中。

当时,当我在C ++工作时,有一个非常棒的工具叫做BugTrapper。大约7年前,他们是一家创业公司,这是他们制作的令人印象深刻的软件。我认为他们从那时起已经成熟了很多,并且据我所知looking at their site就业。曾经是很酷的东西,虽然我不确定它现在是什么样的。无论如何,在重新发明轮子之前,值得尝试现成的解决方案。恕我直言。

答案 2 :(得分:0)

这看起来像是一个好的探查者应该能够为你收集的东西,而无需更改你的源代码。

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

答案 3 :(得分:0)

这听起来像是YAGNI的经典案例 - 我建议花时间去设计并正确编写软件。