如何对代码进行超越函数级别的分析?

6
据我所知,分析工具只能告诉我们每个函数花费了多少时间。但是,由于 C++ 编译器倾向于积极地进行内联,而且有些函数并不是那么短小精悍,因此了解更多细节通常是非常有用的——比如每个结构体占用了多少时间。

除了将代码重构为更小的函数之外,还有什么方法可以实现这一目标吗?

2个回答

5
如果您使用 采样分析器(例如 ZoomShark),而不是 插桩分析器(例如 gprof),那么您可以获得更精细的剖析数据,可以到达语句和指令级别。

1
++ 尝试使用Zoom或任何能够在您关心的时间间隔内以随机的挂钟时间获取堆栈样本,并告诉您每行代码出现在百分之几的样本的分析器。这里是一些原因的列表。 令人惊讶的是,有多少分析器不“明白”它。 - Mike Dunlavey
@sharptooth:线百分比墙时堆栈采样器之所以如此有效,是因为它们自动化了(在我看来)一种更有效的手动方法——随机暂停。 - Mike Dunlavey

2
如果您可以使用callgrind,那么您可以得到哪些方法占用了大部分处理时间的摘要。然后您可以使用kcachegrind查看结果。它提供了一个非常漂亮的图表,通过它您可以轻松浏览并找到瓶颈。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接