https://blog.csdn.net/yuyin86/article/details/6671472
gprof[每个函数的调用时间] 仅单线程、用户态
gprof的基本用法:
1. 使用 -pg
选项编译和链接你的应用程序 ,在gcc编译程序的时候,加上-pg选项,如果是大项目,就在makefile里面修改编译选项,-pg放在那里都行。例如:
gcc -pg -o test test.c
2. 执行你的应用程序使之生成供gprof 分析的数据,运行刚才的程序:
./test input.txt output.txt
这样就生成了一个gmon.out文件,该文件就包含了profiling的数据。
3. gprof ./test gmon.out
会输出分析结果到标准输出./test
不用传上面运行传入的参数
这里可以给gprof传参数,man gprof
不加参数输出的是所有函数的累计执行时间,剔除了children的执行时间;
加上-F
等参数还会输出call graph(每个函数谁调用它它调用谁以及时间以及被当前函数调用次数在总被调用次数的占比,并且按照self+children总时间降序,相当好的一张表)gprof -FTask1 ./test gmon.out
仅为函数Task1以及其孩子生成call graph
gprof举例
先编译参数加上-pg
编译产生可执行文件
g++ -std=c++11 -g -pg main.cpp -o main
然后正常运行
./main -m msbfs -g test_graph.txt -o . -p vertex_pairs.txt
然后会在运行的当前目录下生成gmon.out
文件
分析此文件输出分析结果。此文件可以备份起来,之后还可以基于此文件以及对应的可执行文件生成各种分析文件
这会输出各函数的调用时间(降序,去除孩子的执行时间)
gprof ./main gmon.out
这除了上述还会输出callgraph(每个函数的执行时间(包括孩子的执行时间),以及孩子的执行时间)
传入-F
的过滤似乎无效,但是会出发输出callgraph
gprof -FComputeTask ./main gmon.out