根据gperftools 文档,可以使用以下任何方法启动分析器:
- 将
CPUPROFILE
环境变量设置为配置文件信息将保存到的文件名 - 执行上述操作,并设置
CPUPROFILESIGNAL
和发送适当的信号以启动或停止采样。 - 直接从您的
ProfilerStart(filename)
代码调用ProfileStop()
这三种方法也需要libprofiler.so
链接。
当我尝试这个时,第三种方法有效,但是当我只是 set 时CPUPROFILE
,没有生成分析信息。
不工作:
$ cat foo.c
#include <stdio.h>
int main(void) {
printf("Hello, world!\n");
}
$ gcc foo.c -std=c99 -lprofiler -g && CPUPROFILE=foo.prof ./a.out
Hello, world!
$ ls foo.prof
ls: cannot access foo.prof: No such file or directory
是否有效:
$ cat bar.c
#include <stdio.h>
#include <gperftools/profiler.h>
int main(void) {
ProfilerStart("bogus_filename");
printf("Hello, world!\n");
ProfilerStop();
}
$ gcc -std=c99 bar.c -lprofiler -g && CPUPROFILE=foo.prof ./a.out
Hello, world!
PROFILE: interrupts/evictions/bytes = 0/0/64
$ ls foo.prof
foo.prof
$ ls bogus_filename
ls: cannot access bogus_filename: No such file or directory
$ ./a.out
Hello, world!
PROFILE: interrupts/evictions/bytes = 0/0/64
$ ls bogus_filename
bogus_filename
请注意,CPUPROFILE
正在读取它,因为它的值会覆盖传递给ProfileStart()
if 设置的文件名。