【发布时间】:2017-01-02 11:43:22
【问题描述】:
我一直在尝试使用gprof 2.25.2(在 Cygwin 下)来分析一些 C++,它报告说 10% 的时间都花在了一个我知道没有被调用的函数上。 (我在相关函数中放了一条打印语句来验证这一点。)它似乎也认为这个函数正在递归调用自己(调用次数为500+16636500),它绝对不是。
这是一个足够大的程序,我没有一种简单的方法来生成可以在此处发布的最小工作示例,但如果有人对可能导致此问题的原因有任何想法,我将不胜感激。
编辑:使用 CMake + g++ 构建。 CMAKE_BUILD_TYPE=RELWITHDEBINFO。
【问题讨论】:
-
也许把
RELWITHDEBINFO改成DEBUG -
@texasflood 这确实消除了错误,但我不再相信分析结果代表程序,因为它会在真实环境中运行。
-
一般来说这是一个根本无法避免的问题。如果要对代码进行剖析,则不能进行太多优化,否则您编写的源代码与实际目标文件之间的链接会变得非常复杂(例如,可能会添加和删除函数和变量)。当然,当您想在真实环境中运行代码时,您希望它得到全面优化,这可能使从分析得出的结论无效。这个问题没有简单的答案
-
如果你想要速度,不要“分析性能”。 做找到速度错误。见here。关键是,如果您进行分析的原因是为了找到可以加快代码速度的方法,那么它不需要进行编译器优化,事实上最好不要。 (尽管很多人会告诉你。)当你完成它时,然后打开优化器。