将 gprof 与 makefile 一起使用

Posted

技术标签:

【中文标题】将 gprof 与 makefile 一起使用【英文标题】:Using gprof with a makefile 【发布时间】:2012-03-01 17:44:28 【问题描述】:

我在尝试分析我的程序时遇到问题。

我像这样单独编译每个函数:

function1.o:        function1.cpp
    g++ -g -pg -z -c function1.cpp

然后我像这样将所有内容链接在一起:

exec: function1.o function2.o function3.o main.o  
    g++ -g -pg -z -c -o exec function1.o function2.o function3.o main.o

但是当我用./exec 运行程序然后用gprof exec 分析数据时,我没有得到分析数据,它说:

granularity: each sample hit covers 4 byte(s) no time accumulated

我做错了吗?

【问题讨论】:

您是否考虑过使用 valgrind-callgrind 和 kcachegrind 代替?我有一个类似的问题,无法让 CMAKE 与 gprof 一起工作,最终使用了 callgrind。 kcachegrind 可视化很有帮助。 为什么你认为问题与make的使用有关?手动编译,不使用make,难道看不到问题吗? 【参考方案1】:

很可能您的程序运行时间不够长,gprof 无法收集任何样本。

你可以通过多次执行主循环来任意增加运行时间。

如果您在 Linux 上运行,请允许我也推荐 perf,这是一个非常好的分析工具。

【讨论】:

以上是关于将 gprof 与 makefile 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

使用cmake与makefile调试需要指定的参数[GDB与Gprof参数]

使用cmake与makefile调试需要指定的参数[GDB与Gprof参数]

Emscripten - 如何将我的makefile与emcc一起使用而不是gcc?

如何编译要使用 Gprof 分析的驱动程序

使用 gprof 和 boost

与匿名管道一起使用的Diff在放入Makefile时会出现奇怪的错误