gperftools CPU profiler 究竟是如何启动的?

2024-02-01

gperftools 文档 http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.htmllibprofiler应该链接到目标程序:

$ gcc myprogram.c -lprofiler

(无需更改程序代码)。

然后程序应该使用特定的环境变量运行:

CPUPROFILE=/tmp/profiler_output ./a.out

问题是:如何libprofile有机会在仅加载时启动和完成探查器,但未调用其函数吗?

该库中没有构造函数(). 在库代码中不要引用启动探查器的任何位置。

我没有主意了,下一步该去哪里?


根据链接网页的文档,在链接库下,它描述了 -lprofiler 步骤与使用 LD_PRELOAD 选项链接共享对象文件相同。

共享对象文件与头文件不同。头文件包含编译程序时查找的函数声明,因此可以解析函数的名称,但名称只是名称,而不是实现。共享对象文件 (.so) 包含函数的实现。欲了解更多信息,请参阅以下 StackOverflow 答案 https://stackoverflow.com/questions/1176427/shared-libraries-and-h-files.

/trunk/src/profiler.cc 源文件 https://code.google.com/p/gperftools/source/browse/src/profiler.cc第 182 行有一个 CPUProfiler 构造函数,用于根据 CPUPROFILE 环境变量(第 187 行和第 230 行)检查是否应启用分析。

然后,它在第 237 行调用 Start 函数。根据此文件中的注释,析构函数在第 273 行调用 Stop 函数。

回答你的问题我相信第132行CpuProfiler CpuProfiler::instance_;是实例化 CpuProfiler 的行。

gperftools 文档中缺乏清晰度是已知问题,请参阅here http://code.google.com/p/gperftools/issues/detail?id=412.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gperftools CPU profiler 究竟是如何启动的? 的相关文章

随机推荐