gperftools documentationlibprofiler应该链接到目标程序:

$ 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

08-16 10:33