如何从 gprof 中排除某个函数?

Posted

技术标签:

【中文标题】如何从 gprof 中排除某个函数?【英文标题】:How to exclude a certain function from gprof? 【发布时间】:2014-09-04 16:27:39 【问题描述】:

我想分析我的代码,但我希望一个函数不计算在内。

我编译为:

g++ main_no_time.cpp -Wall -std=c++0x -p -pg -O3 -o eg

然后我运行为:

./eg Datasets/Klein_nb_P1000_dim10000.txt 16 5 3 1
gprof -Q ./eg > Klein_nb_P1000_dim10000_cpu_rot1.txt

我要排除的函数有这个签名。

void readDivisionSpace(Division_Euclidean_space& ds, char* filename);

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

对于从平面配置文件中排除功能,您需要使用-P 选项:

gprof eg gmon.out -P_Z17readDivisionSpaceRiPc > Klein_nb_P1000_dim10000_cpu_rot1.txt

对于从调用图中排除函数,您需要使用-Q 选项:

gprof eg gmon.out -Q_Z17readDivisionSpaceRiPc > Klein_nb_P1000_dim10000_cpu_rot1.txt

这个选项可以同时使用:

gprof eg gmon.out -P_Z17readDivisionSpaceRiPc -Q_Z17readDivisionSpaceRiPc > Klein_nb_P1000_dim10000_cpu_rot1.txt

注意:_Z17readDivisionSpaceRiPc 是函数的错位名称。对于检测功能选项--no-demangle 的损坏名称可能很有用。您可以尝试通过以下方式检测函数 readDivisionSpace 的错位名称:

gprof eg gmon.out --no-demangle -Q -b | grep readDivisionSpace

【讨论】:

我使用了'gprof eg gmon.out -P_readDivisionSpace -Q_readDivisionSpace > Klein_nb_P1000_dim10000_cpu_rot1.txt',但该函数仍然很重要。我错过了什么? :// _readDivisionSpace - 看起来很可疑,这是真正的错位名称吗?你可以用gprof eg gmon.out --no-demangle -Q -b查看名字。 我不知道什么是乱码。这是我在问题中写的功能。命令应该如何? 我希望它有助于检测名称:gprof eg gmon.out --no-demangle -Q -b | grep readDivisionSpace 是的!好的。我建议您使用此信息(名称检测)编辑您的答案。谢谢。

以上是关于如何从 gprof 中排除某个函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从表单中排除字段?

BEP20 如何从 maxlimit 函数中排除销毁钱包

如果另一个类的复选框已被选中,如何从 jQuery 过滤器中排除某个复选框类?

从聚合函数中排除一些记录

从产品类别中排除最近查看的产品小部件中的 Woocommerce 产品

如何从 Eclipse 的标记视图中排除文件/文件夹?