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
窗口:
有很多核心函数和库函数,但我如何设置 valgrind
或 kcachegrind
以仅跟踪代码中的函数(当然,这些函数调用库函数)?
预期的输出是这样的:
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。仅显示我的代码中的函数的主要内容,如果未能解决你的问题,请参考以下文章
使 callgrind 显示 kcachegrind 调用图中的所有函数调用