我需要分析几个C代码并获得一个带注释的文件,其中包含每行所占用的执行时间百分比或至少每个块(而/ if-else / for-functions)等。
到目前为止,我已经研究过valgrind(callgrind)和gperf以及其他一些工具。到目前为止,我得到的是
但是,如果执行时间的百分比不是计数,应该是每行源代码或至少所有块(而/ if-else / for-functions),我需要做什么。 < / p>
有人能告诉我一种可以做到的方法吗?
谢谢,
答案 0 :(得分:0)
我相信perf(1)
(Ubuntu中linux-tools-common
包的一部分)会为您提供所需内容。它利用了一个名为 Linux的性能计数器的基于内核的子系统,包含在较新的内核中。可以找到更多信息here。
下面的简单用法示例。确保使用调试符号进行编译。
$ perf record ./myprogram arg1 arg2
$ perf report
Cachegrind也许值得研究。
答案 1 :(得分:0)
如果要包含I / O,您需要在CPU时间或挂钟时间内对堆栈进行采样。 您不需要特别高的采样频率。
每个堆栈示例都是一个代码位置列表,其中一些可以跟踪到代码中的行。
一行代码的包含百分比成本只是包含它的堆栈样本数除以堆栈样本总数(乘以100)。
这有用的是它告诉你,如果你可以摆脱那条线,你可以节省多少时间。
独占百分比是该行最后出现的样本分数。
如果一行代码在堆栈样本中出现多次,那么它仍然只是一个包含它的样本。 (这会照顾递归。)
哪些工具可以做到这一点?也许是oprofile
。当然Zoom
。