gperftools documentation说libprofiler
应该链接到目标程序:
$ gcc myprogram.c -lprofiler
(无需更改程序代码)。
然后,应使用特定的环境变量运行程序:
CPUPROFILE=/tmp/profiler_output ./a.out
问题是:
libprofile
仅在加载但没有调用其功能时,如何有机会启动和完成分析器?该库中没有构造函数(proof)。
库代码中的All occasions of "CPUPROFILE"并不指向启动分析器的任何位置。
我没有主意,接下来要去哪里看?
最佳答案
根据链接网页上的文档,在链接库下,它描述了-lprofiler步骤与使用LD_PRELOAD选项链接共享对象文件相同。
共享对象文件与头文件不同。头文件包含在编译程序时查找的函数声明,因此可以解析函数的名称,但名称仅是名称,而不是实现。共享对象文件(.so)包含功能的实现。有关更多信息,请参见the following StackOverflow answer。
第182行上的Source file of /trunk/src/profiler.cc具有CPUProfiler构造函数,该构造函数根据CPUPROFILE环境变量(第187行和第230行)检查是否应启用概要分析。
然后,它在237行调用Start函数。根据该文件中的注释,析构函数在273行调用Stop函数。
要回答您的问题,我相信第132 CpuProfiler CpuProfiler::instance_;
行是CpuProfiler实例化的行。
gperftools文档中的这种不明确之处是已知问题,请参见here。