我想了解一个给我的C ++程序是如何工作的,以及它花费最多的时间。
为此,我尝试使用第一个gprof
然后gprof2dot
来获取图片,但结果有时很难看。
你通常如何做到这一点?你能推荐更好的替代品吗?
Pd积。哪些是开源解决方案(最好是Linux或Mac OS)X?
答案 0 :(得分:1)
Linux上的OProfile工作得相当好,实际上我比GProf更喜欢它。有一些图形工具可以帮助可视化OProfile输出。
答案 1 :(得分:0)
请参阅SD C++ Profiler。
此处的其他答案表明,面向探针的分析器具有较高的开销(10x)。这个没有。
答案 2 :(得分:0)
在我看来,有两种选择(在Windows上):
虽然我过去使用过Rational Quantity和AQTime这样的商业分析器,并且对结果非常满意,但我发现缺点(难以设置,无法解释的崩溃,性能缓慢)超过了优势。
因此我改用免费替代品,此时我主要使用“非常困”。
答案 3 :(得分:0)
如果你想查看你的应用程序的结构(谁调用什么,引用,调用树,...),请查看“了解C / C ++”。此应用程序调查您的源代码,并允许您从应用程序的结构中查询几乎所有内容。
答案 4 :(得分:0)
您可以尝试KCachegrind。这是一个可视化由Valgrind工具Callgrind获取的样本的程序。 KCachegrind可能似乎没有得到积极维护,但他生成的图表非常有用。
答案 5 :(得分:0)
我一直听到这个消息 - “我想找出 我的程序花费时间的地方”。
让我建议另一种措辞 - “我想找出 为什么 我的程序花费时间”。
也许差异并不明显。
当程序执行指令时,为什么这样做的原因是在程序的整个状态中编码,包括调用堆栈。
仅查看程序计数器就像试图通过分析其车轮的旋转角度来确定是否需要乘坐出租车
你需要看一下程序的整个状态。
我总是听到另一个神话 - 你需要测量方法的执行时间,找到“慢”的方法。 程序有很多方法比他们需要花费更多的时间,比如通过线性搜索而不是某种方法中的二元搜索,这可能是人们想到的事情。
考虑它的方法是:
从时间角度来看,here's how many people do it是一种了解该计划正在做什么的方法。