我正在寻找一些工具来分析时间花在哪里。看过oprofile,但这并没有真正给我我需要的东西。
我正在查看 callgrind,特别是使用 CALLGRIND_START_INSTRUMENTATION 和 CALLGRIND_STOP_INSTRUMENTATION 宏。我不希望该工具像 valgrind 通常那样使应用程序减慢太多。但这并没有真正起作用,因为 Valgrind 似乎将所有内容都序列化到一个线程中。
例如,如果 fn A 调用 fn C 的 fb B,然后返回到 B 和 A,我想知道在哪里花费了多少时间。我有一些正在使用的互斥锁工具,但是一个好的时间工具对于查看时间到底花在哪里非常有用,这样我就可以专注于这些路径。除了自己添加一些东西之外,有什么工具可以用来完成这项任务吗?顺便说一句,它是一个 C++ 应用程序。我不能使用 valgrind,因为它在内核中是单线程的。此外,我的应用程序需要花费大量时间等待,所以普通的 CPU 分析器并没有真正提供太多帮助。