剖析C ++编译过程

我倾向于编写相当大的模板化头文件C ++库,而我的用户通常会抱怨编译时间。 想到这件事后,我想起了我不知道时间在哪里。 是否有一些简单的方法来用常见编译器(如g ++,icc和xlC)剖析C ++编译过程? 例如,是否有可能知道在C ++编译的每个阶段花了多少时间?


对于GCC ,有调试选项可以查找how much time is spent within each of the phases of C++ compilation?

-Q使编译器在编译时输出每个函数名称,并在每次传递完成时打印一些统计信息。

-ftime-report使编译器打印一些统计信息,说明每次传递完成时所用的时间。

GCCINT 9:编译器的通过和文件中描述了通过。

你可以在这里用-v -ftime-report来发布单源文件的g ++编译输出来讨论它。 在GCC邮件列表上可能会有一些帮助。


对于除GCC以外的编译器(或比3.3.6更古老的GCC),请参阅此主题中的其他选项。


Boost项目中有一个工具 ,对于任何编译器和构建系统都很有用。

该工具需要使用TEMPLATE_PROFILE_ENTER()TEMPLATE_PROFILE_EXIT()宏调用的源代码工具 。 这些宏然后在编译时生成特定的诊断(警告),这些宏随着实例化调用堆栈(由此允许通过脚本构建和可视化调用图)而被定时和收集。 不错,国际海事组织。

尽管如此,我还没有使用它。


我还没有尝试过,但templight看起来很有希望:https://github.com/mikael-s-persson/templight

链接地址: http://www.djcxy.com/p/43847.html

上一篇: Profiling the C++ compilation process

下一篇: Profiling C++ in the presence of aggressive inlining?