4

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

查看 KCacheGrind 中的结果,我得到了关于哪些函数占用了我大部分时间的重要信息。但是,它不会让我逐行查看信息,而是说我需要使用调试符号编译它并再次运行分析。

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

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

4

2 回答 2

0

您是否--dump-instr=yes --trace-jump=yes用于获取指令级别信息?

于 2010-06-25T16:38:21.097 回答
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文件中通常的摘要报告之后。因此,您必须滚动查看报告中的内容才能找到它们。

于 2020-08-26T16:42:38.107 回答