抱歉,我无法创建一个最小的完整示例,因为问题只出现在相对较大的程序中,我不确定这本身就是一个“bug”,而不是对callgrind profiling应该完成什么的误解。 。
我有一个大型程序,其运行时间约为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中的结果)时,我得到了一些关于函数调用的结果,这些结果大致与你期望的一样:除了一件事:函数调用没有解析第二部分:配置文件输出在质量上与
相同Part1_main 50 4
Part2_main 50 50
Part1_main_subfunction_1 20 4
Part1_main_subfunction_2 15 5
...
...
...
第二个功能有很长的自我时间是什么解释?似乎分析器认为它没有调用任何其他功能。我想尽管不太可能,但函数2中的所有内容都是内联的,所以也许不应该有任何进一步的解决方案。如果这是真的,那么这不会产生非常有趣的分析结果。
如果您遇到过这种类型的事情,你如何迫使探查者显示进一步的分辨率?或者,如果我的直觉是错误的,还有什么可能导致这种行为?
根据callgrind网站的说明,我正在使用-g标志进行编译,并启用了优化。
答案 0 :(得分:1)
默认情况下,kcachegrind会隐藏功能较小的功能,但您可以自定义它。看到答案: Make callgrind show all function calls in the kcachegrind callgraph