【发布时间】:2015-10-09 12:19:06
【问题描述】:
我正在使用 gprof 分析 C++ 程序的平面轮廓。但是,由于我不想进入配置文件的昂贵的设置和拆卸代码,我想触发仅针对某个块收集数据。我想做类似的事情:
void foo() {
--- start collecting ---
do stuff
--- stop collecting
}
有什么想法吗?
【问题讨论】:
标签: c++ gcc g++ profiling gprof
我正在使用 gprof 分析 C++ 程序的平面轮廓。但是,由于我不想进入配置文件的昂贵的设置和拆卸代码,我想触发仅针对某个块收集数据。我想做类似的事情:
void foo() {
--- start collecting ---
do stuff
--- stop collecting
}
有什么想法吗?
【问题讨论】:
标签: c++ gcc g++ profiling gprof
gprof 的文档描述了分析数据的生成由一个简单的-pg 编译器开关控制。
因此,在我看来,将昂贵的设置和拆卸代码分解到单独的源文件中,并在没有-pg 编译器开关的情况下编译该源文件,这似乎是合乎逻辑的。
【讨论】:
setitimer 将要求内核每秒发送 100 次特殊信号;低开销)以获取配置文件;和来自编译器工具的调用图信息(每次调用的高开销)。为某些源关闭 -pg 将仅禁用第二个数据源,这将加速该文件中的代码,但不会完全关闭分析。 (第一个源应该通过 -pg 选项启用到链接步骤以获取 gmon.out 文件)
您必须使用 -pg 在不同的源中构建您的关键功能,然后
【讨论】: