【问题标题】:Nonsense results from gprofgprof 的废话结果
【发布时间】: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。关键是,如果您进行分析的原因是为了找到可以加快代码速度的方法,那么它不需要进行编译器优化,事实上最好不要。 (尽管很多人会告诉你。)当你完成它时,然后打开优化器。

标签: c++ gprof


【解决方案1】:

我假设你使用的是 gcc/g++...

这听起来像是调试符号相对于您的源代码或可执行文件已过时的情况。尝试清理你的构建空间,重新编译(当然是-g-ggdb3)。如果您正在使用优化进行编译并且您可以关闭它们(即-O0 而不是-O1-O2-O3),请在此运行中这样做。如果可行,请尝试 -O1-O2 看看会发生什么。

【讨论】:

  • 可悲地清理 + 添加-ggdb3 -O0 并不能解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
相关资源
最近更新 更多