kcachegrind的控制台替代品?

21

Kcachegrind非常棒,是我最喜欢的工具之一,但有时候我需要在远程服务器上运行它的终端版本(例如使用ssh)。

我知道可以设置VNC或X-server转发,但这些方法很繁琐,我需要更简单的解决方案。

是否有任何基于ncurses的kcachegrind控制台替代品?

5个回答

15
您可以使用命令行实用程序callgrind_annotate(由valgrind --tool=callgrind创建)从callgrind输出文件中获取基本信息和注释。(手册页面 文档中的部分)。对于由cachegrind (valgrind --tool=cachegrind) 生成的文件,您可以使用cg_annotate文档中的部分)。这些实用程序默认与valgrind一起构建。
另一种方法是将程序和缓存/ callgrind输出文件复制到您的计算机上,然后像往常一样使用本地kcachegrind进行分析。但是,如果您的计算机没有unix而是windows或者运行在不兼容的体系结构上,这种方式可能会比较困难(kcachegrind可以调用本地的objdump来获取有关程序的信息)。
我还想推荐一下valgrind的命令行选项:
 valgrind --tool=cachegrind --branch-sim=yes 
 valgrind --tool=callgrind --dump-instr=yes --trace-jump=yes

您还可以使用 --I1=32768,8,64 --D1=32768,8,64 --L2=3145728,12,64 指定 cachegrind 的缓存大小。


5

Webgrind 是一个用 PHP 编写的 Web 前端,它解析 XDebug 的输出(XDebug 使用与 callgrind 相同的格式)。


它实现了kcachegrind的一部分功能,因此例如汇编器输出将通过webgrind无法访问。 - osgx

4
使用SSHFS挂载你正在工作的远程目录(例如参见Ubuntu上的SSHFS安装说明)。
然后只需通过ssh进入并在远程目录中运行valgrind --tool=callgrind,使用任何你想要的选项。由于你已经将该目录本地挂载,所以像本地调试一样轻松打开数据文件,使用KCacheGrind即可。

Cachegrind文件可能会变得非常大,高达几百MB。在大文件上执行此操作确实不推荐,因为kcachegrind一次性读取整个文件,即使在快速连接上也需要几分钟的时间。 - Deepak Mittal

0

在远程主机上运行Valgrind/Callgrind似乎是一个不错的选择。或者,您可以将Valgrind或Callgrind的输出通过scp复制到您的PC,并在上面运行KCachegrind。

如果您使用Emacs,您可以在远程主机上启动它并执行此处所示的操作,这将为您提供一个类似于Emacs的前端界面来使用valgrind工具。


-9

kcachegrind在其帮助文档中说明它是cachegrind和callgrind的前端。

cachegrind和callgrind是valgrind最新版本(3.5)的组成部分。因此,请从http://valgrind.org/downloads/current.html#current下载并构建valgrind。运行valgrind --help,它会显示如何使用callgrind功能。

如需更多信息,请告诉我您想要做什么。


3
我认为你没有真正读懂这个问题。我需要的是一个基于ncurses的callgrind/cachegrind前端界面。 - pachanga
答案是valgrind。有关如何使用valgrind的说明,请运行valgrind --help命令。 - Thorsten Staerk
3
你错了,答案不是Valgrind。Valgrind只执行“运行和收集信息”的步骤,而不是针对Callgrind和Cachegrind查看结果。 - osgx
@ThorstenStaerk,非常明确地说,valgrind的输出(在callgrind或cachegrind模式下)并不特别适合人类阅读。kcachegrind不仅运行工具,还解释结果--这对于能够实际利用这些结果的能力是至关重要的。它是一个基于curses的工具,旨在协助进行此处所请求的解释。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接