调整callgrind

时间:2017-03-07 09:57:19

标签: c++ valgrind callgrind

抱歉,我无法创建一个最小的完整示例,因为问题只出现在相对较大的程序中,我不确定这本身就是一个“bug”,而不是对callgrind profiling应该完成什么的误解。 。

我有一个大型程序,其运行时间约为50 50,分为2个连续部分。第一部分是大多数文件读取,第二部分主要是计算。

我期望的函数调用顺序如下:

调用范围,Callee

主要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标志进行编译,并启用了优化。

1 个答案:

答案 0 :(得分:1)

默认情况下,kcachegrind会隐藏功能较小的功能,但您可以自定义它。看到答案: Make callgrind show all function calls in the kcachegrind callgraph