13

我想分析我的代码。所以我这样做:

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

现在我有这样的kcachegrind窗口:

在此处输入图像描述

有很多核心函数和库函数,但是如何设置valgrindkcachegrind跟踪代码中的函数(当然,这些函数调用库函数)?

预期的输出是这样的:

  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

4 回答 4

5

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

但是,您将无法获得所需的输出。你不能用 Valgrind 测量时间,它只计算指令并且可以估计循环计数和缓存未命中。而且 callgrind 也不会向您显示完整的函数签名,它总是会删除参数并且只显示函数名称。

于 2016-11-07T09:26:04.890 回答
3

Valgrind提供工具来抑制来自特定目标文件或某些库的特定错误或错误。检查此链接

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

valgrind --tool=callgrind --suppressions=/path/to/a.supp my_program [程序参数]

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

于 2016-11-03T04:57:49.330 回答
1

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

在此处输入图像描述

于 2016-10-28T15:16:28.080 回答
1

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

于 2016-11-07T08:54:15.663 回答