我正在开发自己的分配器,并使用
LD_PRELOAD
环境变量来插入 libc
的 malloc 函数。
我想在运行某些应用程序时分析我的代码,例如测量每个函数相对于总执行时间所花费的时间。
如何准确测量应用程序运行时代码中每个函数所花费的时间?
我知道我可以使用
gettimeofday()
h 中的 sys/time.
来测量时间,但它会带来自己的开销。
我考虑过使用
perf
或 gprof
等工具,但我不确定如何在需要使用 LD_PRELOAD
进行干预的环境中使用它们。
我不确定如何在需要使用
进行干预的环境中使用它们LD_PRELOAD
使用
perf
应该就可以了™:
perf record env LD_PRELOAD=./mymalloc.so /path/to/program
使用
gprof
无法开箱即用,因为没有任何东西可以调用“保存覆盖范围”钩子 (_mcleanup
),除非您 也 使用 -pg
构建主程序。
如果您使用
a.out
构建主 malloc
和 -pg
中介层,则 gprof
也应该可以工作™。