我打算在我的软件中添加大量的诊断信息。现在,我正在考虑如何执行此操作的总体策略,因为仅临时添加此类代码可能会导致严重的困惑。

您对此有任何经验吗?

我要监视:

  • 从选定子集中创建对象的强度。
  • 如何密集调用选定的方法。
  • 选定时间段内的其他事件数。
  • 对于选定的方法,收集有关调用方的信息(libcwd allows this?)
  • 每个线程按时间段顺序消耗的时间量。

  • 我的软件是一个类似处理的工具,通常可以像其他处理或计算工具一样工作,例如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") {
            // ...
        }
    }
    

    最佳答案

    我首先想到的是,您可能可以充分利用单独的配置工具。这也将消除更改源代码以允许它的需要。

    我可以推荐的工具:

  • Valgrind,其中KCachegrind作为Linux的前端
  • XPerf适用于Windows(Vista,7及更高版本)

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

    关于c++ - C++运行时调试(诊断策略和构造),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1098069/

    10-15 00:38