我有一个项目,其中通过文件运行计算。我需要测量运行某个文件后调用的函数的执行时间。代码的所有功能都位于大量其他文件中。下面是我用来测量单个函数的时间的性能探针方法。如果您需要测量少量函数的时间,则此方法很容易使用,但就我而言,不同的二进制文件和文件中有很多函数,并且为每个函数创建探测事件需要很长时间。
创建一个探测事件,用于函数的入口点和出口点:
sudo perf probe -x ./binary_file_name --add func_name --add func_name%return
开始分析创建的事件:
sudo perf record -e probe_binary_file_name:func_name -e probe_binary_file_name:func_name ./a.out
因此,我可以找出 func_name 的调用次数以及每次调用的工作时间。 有没有办法为大量函数创建探测事件而无需写出所有函数的名称?
有几种方法可以做到这一点:
perl/python
] 脚本来解析 .c
文件并提取函数名称。readelf -s
和/或 .o
文件执行 a.out
操作,并提取标记为 FUNC
的名称。对于第一种方法,您可以首先通过压头程序(例如 GNU
indent
)运行源文件。它可以将函数的返回类型强制到单独的行,并将函数名称强制到第 1 列。这使得解析变得非常容易:任何以正则表达式 ^([a-zA-Z][a-zA-Z0-9]*)[(]
开头的行都将是函数名称。
此脚本可以作为
make
的一部分运行,并将名称(以您希望的 any 格式)输出到输出文件。该文件还可以包含您想要的确切 perf
参数。