【问题标题】:Kcachegrind. Show only functions from my codeKcachegrind。仅显示我的代码中的函数
【发布时间】: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 是的,我这样做了,但是源代码分组还包括库中的文件和包含文件(我不想看到)

标签: c++ valgrind callgrind kcachegrind


【解决方案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 也不会显示完整的函数签名,它总是会删除参数并且只显示函数名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-30
        • 2016-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多