c – 如何使用KCachegrind和Callgrind仅测量部分代码?
我想用valgrind来分析我的代码.问题是,我有一个我不感兴趣的巨大启动序列.
我在valgrind / callgrind.h中找到了应该帮助我的定义: > CALLGRIND_START_INSTRUMENTATION 根据this article,我必须使用以下选项执行valgrind: valgrind –tool = callgrind –instr-atstart = no ./application 当我这样做时,会创建两个文件: > callgrind.out.16060 然后我想用kcachegrind来显示我的结果.这很好用,但跳过我的启动序列的makros似乎什么也没做.我只需要在我想要的地方测量性能,我该怎么做? 解决方法
我现在明白了,但我不是百分之百确定原因.我将尝试描述一下我的代码:
我有一个Application类,负责很多子系统.在我最初的尝试中,我尝试测量应用程序内部的性能,如下所示: int main(int argc,char *argv[]) { Application a(argc,argv); return a.exec(); } void Application::Application(int &argc,char **argv) { m_pComplexSystem = new ComplexSystem(); m_pComplexSystem->configure(); CALLGRIND_START_INSTRUMENTATION; m_Configurator->start(); } Application::~Application() { CALLGRIND_STOP_INSTRUMENTATION; CALLGRIND_DUMP_STATS; m_pComplexSystem ->stop(); delete m_pComplexSystem; m_pComplexSystem = 0; } 由于某种原因,定义被忽略了,我得到了整个构造函数的性能度量以及在ComplexSystem成员的configure()调用中完成的所有操作. 所以现在我使用这个似乎有用的代码: int main(int argc,argv); CALLGRIND_START_INSTRUMENTATION; int result = a.exec(); CALLGRIND_STOP_INSTRUMENTATION; CALLGRIND_DUMP_STATS; return result; } 虽然它与我原来的尝试并不完全相同,但我现在可以开始寻找慢功能了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |