Dan*_*nov 9 linker gcc dynamic-linking google-perftools gperftools
gperftools文档说libprofiler应该链接到目标程序:
$ gcc myprogram.c -lprofiler
Run Code Online (Sandbox Code Playgroud)
(不改变程序代码).
然后程序应该使用特定的环境变量运行:
CPUPROFILE=/tmp/profiler_output ./a.out
Run Code Online (Sandbox Code Playgroud)
问题是:libprofile当仅仅加载探测器时,如何有机会启动和完成探查器,但是它的功能没有被调用?
该库中没有构造函数(证明). 库代码中"CPUPROFILE"的所有情况都不会引用启动分析器的任何位置.
我没有想法,在哪里看下一个?
根据链接网页的文档,在链接库下,它描述了-lprofiler步骤与使用LD_PRELOAD选项链接共享对象文件相同.
共享对象文件与头文件不同.头文件包含在编译程序时查找的函数声明,因此函数的名称解析,但名称只是名称,而不是实现.共享对象文件(.so)包含函数的实现.有关更多信息,请参阅以下StackOverflow答案.
第182 行上的/trunk/src/profiler.cc的源文件有一个CPUProfiler构造函数,它根据CPUPROFILE环境变量(第187行和第230行)检查是否应该启用性能分析.
然后它在第237行调用Start函数.根据此文件中的注释,析构函数在第273行调用Stop函数.
为了回答你的问题,我认为第132 CpuProfiler CpuProfiler::instance_;行是实例化CpuProfiler的行.
gperftools文档中缺乏明确性是已知问题,请参见此处.
| 归档时间: |
|
| 查看次数: |
4852 次 |
| 最近记录: |