如何开始和停止为 gprof 收集配置文件数据

Posted

技术标签:

【中文标题】如何开始和停止为 gprof 收集配置文件数据【英文标题】:How to start and stop collecting profile data for gprof 【发布时间】:2015-10-09 12:19:06 【问题描述】:

我正在使用 gprof 分析 C++ 程序的平面轮廓。但是,由于我不想进入配置文件的昂贵的设置和拆卸代码,我想触发仅针对某个块收集数据。我想做类似的事情:

void foo() 
 --- start collecting ---
  do stuff
 --- stop collecting

有什么想法吗?

【问题讨论】:

【参考方案1】:

gprof 的文档描述了分析数据的生成由一个简单的-pg 编译器开关控制。

因此,在我看来,将昂贵的设置和拆卸代码分解到单独的源文件中,并在没有-pg 编译器开关的情况下编译该源文件,这似乎是合乎逻辑的。

【讨论】:

gprof 有两个数据源:来自 itimer 的周期性样本(setitimer 将要求内核每秒发送 100 次特殊信号;低开销)以获取配置文件;和来自编译器工具的调用图信息(每次调用的高开销)。为某些源关闭 -pg 将仅禁用第二个数据源,这将加速该文件中的代码,但不会完全关闭分析。 (第一个源应该通过 -pg 选项启用到链接步骤以获取 gmon.out 文件)【参考方案2】:

您必须使用 -pg 在不同的源中构建您的关键功能,然后

【讨论】:

以上是关于如何开始和停止为 gprof 收集配置文件数据的主要内容,如果未能解决你的问题,请参考以下文章

gprof 错误:配置文件的版本不受支持

如何让 gcc 为 gprof 生成信息?

Filebeat 安装与配置

如何在 Linux 中使用 gprof?

使用 gprof 分析我的代码时出现不一致

Logstash:如何配置 Metricbeat 及 Logstash 为 Elasticsearch 8.x 收集数据