我想描述一下我的代码。所以我这样做:
valgrind --tool=callgrind my_program [programm arguments]
kcachegrind callgrind.out.x
现在我有kcachegrind
这样的窗口:
有很多核心和库函数,但是我如何设置valgrind
或kcachegrind
来跟踪只有函数在我的代码中(当然,还有调用库函数)? / 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[])
答案 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,它可以根据可自定义的预设隐藏系统功能。