如何让callgrind转储源代码行信息?

时间:2010-05-30 02:00:07

标签: c profiling valgrind code-analysis callgrind

我正在尝试在GNU / Linux上分析一个共享库来进行实时音频处理,因此性能非常重要。我运行另一个程序,它将它连接到我的系统的音频输入和输出,并使用callgrind配置它。

查看KCacheGrind中的结果,我可以获得有关哪些函数占用大部分时间的大量信息。但是,它不会让我看一行一行的信息,而是说我需要用调试符号编译它并再次运行分析。

我正在分析的程序没有使用调试符号编译,但库是。我知道这一点,因为有趣的是, cachegrind 的源代码注释工作正常。

当我运行callgrind时,它表示默认是转储源行信息,但它没有这样做。有什么方法可以强制它,或弄清楚是什么阻止了它?

3 个答案:

答案 0 :(得分:2)

答案 1 :(得分:0)

您使用--dump-instr=yes --trace-jump=yes获取指令级别信息吗?

答案 2 :(得分:0)

默认情况下,您已经正确识别了callgrind,因此会在源代码级别执行事件计数。 从callgrind的手册页引用-

--dump-line=<no|yes> [default: yes]

但是,在后期处理期间,您必须使用callgrind_annotate选项为--include工具提供源文件的路径,以使其生成带有逐行信息的带注释的源代码。 从callgrind_annotate的手册页引用-

       -I, --include=<dir>
           Add dir to the list of directories to search for source files.

这是为我工作的示例命令-

callgrind_annotate --auto=yes --include=/home/sangeek/source callgrind.out.15078 > callgrind.annotate.txt 

还请注意,源代码级注释报告位于文件中通常的file:function摘要报告之后。因此,您必须滚动浏览报告中的内容才能访问它们。