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

Posted

技术标签:

【中文标题】Kcachegrind。仅显示我的代码中的函数【英文标题】:Kcachegrind. Show only functions from my code 【发布时间】:2017-03-11 08:18:15 【问题描述】:

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

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[])

【问题讨论】:

您不能单击“位置”选项卡将所有功能分组吗?附加说明:您可以使用 Qt Creator 的调用分析器来执行此操作。 @Asu 是的,我这样做了,但是源代码分组还包括库中的文件和包含文件(我不想看到) 【参考方案1】:

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

【讨论】:

我是ubuntu用户=(【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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

【讨论】:

以上是关于Kcachegrind。仅显示我的代码中的函数的主要内容,如果未能解决你的问题,请参考以下文章

Kcachegrind 覆盖列表项限制为 499

使 callgrind 显示 kcachegrind 调用图中的所有函数调用

python cprofile 显示了很多信息。可以仅限于我的代码吗

chromium中的性能优化工具syzyProf

在 KCacheGrind 中获取完整的应用调用图

在 kcachegrind 中显示调用树