如何从 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 中排除某个函数?的主要内容,如果未能解决你的问题,请参考以下文章
如果另一个类的复选框已被选中,如何从 jQuery 过滤器中排除某个复选框类?