使用 Valgrind 检查 C++ 程序效率

最近写了一个小程序,然后想到有没有什么东西可以方便快速的定位程序中哪里效率最低,然后针对性进行优化,看了 Gprof , Kprof 和 Google perftools,包括Gprof2dot之类转换成dot之后输出的,尽不如意,因为程序逻辑略微复杂,dot画成了一条线,根本没法看,如过要看 Gprof 的输出吧,虽说详细,但是太不人性化,后来突然想到了 Valgrind 套件里面好像有一个 callgrind 组件可以去检测调用树,就找了找相关的,没想到还真的找到了既美观,又方便的办法……

callgrind 要求程序必须正确退出,如果是写Server程序的话,很有可能是无限循环的,那么就可以使用到达N次之后退出,或者监听消息,比如Ctrl+C之类的退出即可。

callgrind 不用对程序做任何更改,只需要执行下列命令即可

valgrind –tool=callgrind –separate-threads=yes 程序地址

然后会输出很多 callgrind.out.xxxx 的文件,不过依旧不易阅读,这里可以使用 KCachegrind 去查看,最终得到的结果类似于这样

KCachegrind

KCachegrind

KCachegrind

KCachegrind

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据