抱歉,我无法创建一个最小的完整示例,因为该问题仅发生在相对较大的程序中,而且我不确定这甚至是一个“错误”本身,而不是对 callgrind 分析应该完成的误解。
我有一个大程序,它的运行时间被分成大约 50 50 成 2 个连续的部分。第一部分主要是文件读取,第二部分主要是计算。
我期望的函数调用顺序如下:
调用范围,被调用者
主要 Part1_main
Part1_main Part1_main_subfunction_1
Part1_main Part1_main_subfunction_2
Part1_main Part1_main_subfunction_3
主要 Part2_main
Part2_main Part2_main_subfunction_1
Part2_main Part2_main_subfunction_2
..
..
当我在代码上运行 callgrind (然后在 osx 上的 kcachegrind 中查看结果)时,我得到了一些关于函数调用的结果,这些结果与您所期望的大致相同,除了一件事:第二部分中没有函数调用的解析:配置文件输出在质量上与
函数,Pct_time,Self_time
Part1_main 50 4
Part2_main 50 50
Part1_main_subfunction_1 20 4
Part1_main_subfunction_2 15 5
..
..
..
第二个功能的自我时间非常高的解释是什么?分析器似乎认为它没有调用任何其他函数。我认为函数 2 中的所有内容都有可能(尽管不太可能)是内联的,所以也许不应该有任何进一步的解决方案。如果这是真的,这不会产生非常有趣的分析结果。
如果您遇到这种类型的事情,您如何强制分析器显示进一步的分辨率?或者,如果我的直觉是错误的,还有什么可能导致这种行为?
根据 callgrind 网站的说明,我正在使用 -g 标志进行编译,并启用了优化。