Kcachegrind。仅显示我的代码中的函数

时间:2016-10-28 12:25:43

标签: c++ valgrind callgrind kcachegrind

我想描述一下我的代码。所以我这样做:

valgrind --tool=callgrind my_program [programm arguments]
kcachegrind callgrind.out.x

现在我有kcachegrind这样的窗口:

enter image description here

有很多核心和库函数,但是我如何设置valgrindkcachegrind来跟踪只有函数在我的代码中(当然,还有调用库函数)? / p>

预期的输出是这样的:

  time  number of calls            function_name()
  4,52%  569854          CSim2Sim  my_function1(int argc, char* argv[])
  3,52%  452158          CSim2Sim  my_function2(int argc, char* argv[])
  3,52%  36569           CSim2Sim  my_function3(int argc, char* argv[])
  1,52%  1258            CSim2Sim  my_function4(int argc, char* argv[])

4 个答案:

答案 0 :(得分:4)

转到视图 - >分组并选择ELF对象。在相应的工具视图中选择您的应用程序/库ELF对象,它将仅显示其中的函数。

虽然你无法获得所需的输出。您无法使用Valgrind测量时间,它只计算指令并可以估计周期计数和缓存未命中。并且callgrind也没有向您显示完整的函数签名,它将始终删除参数并仅显示函数名称。

答案 1 :(得分:2)

Valgrind提供了阻止特定对象文件或某些库中的特定错误或错误的工具。请检查此link

根据此说明,您可以准备您的抑制文件(如a.supp)并将其传递给valgrind

  

valgrind --tool = callgrind --suppressions = / path / to / a.supp my_program [programm arguments]

我还没有使用kcachegrind,但我确信它必须提供一些工具来改变valgrind的命令行选项。

答案 2 :(得分:1)

最接近你要找的东西可能是分组。在工具栏中:查看 - >分组。然后,您可以选择每个源文件或每个ELF对象。前者将为您提供源文件列表,您可以在其中选择您编写的文件,后者将为您提供对象列表,主要是库和具有可执行文件名称的对象:选择它,您应该只查看您的源代码中的调用列表。

答案 3 :(得分:0)

当您使用os x时,可以尝试profilingviewer,它可以根据可自定义的预设隐藏系统功能。

enter image description here