17

我希望介绍我用 Haskell 编写的程序。

在编译时,我被告知我没有criterion安装和cabal中止某些依赖项(例如 )的分析库。

我对分析这些依赖项的一部分没有兴趣;调用 from 的代码main甚至不使用它们。

如何在不安装我不需要的分析库且不删除所有这些依赖项的情况下分析我的应用程序?

4

3 回答 3

13

避免使用 profiling 编译所有内容的好方法是使用 cabal 沙箱。它允许您仅为一个应用程序设置沙箱,因此您不必重新安装整个~/.cabal前缀。您需要最新版本的 Cabal,因此cabal update && cabal install cabal-install请先运行。

初始化沙箱后,创建一个文件cabal.config以包含必要的指令(在您的情况下library-profiling: Trueexecutable-profiling: True也可能很方便。)

这样做的副作用是您可以使用不需要全局安装的依赖项来测试您的代码,例如,实验版本或过时的版本。

编辑:顺便说一句,我认为您不需要启用分析criterion才能工作。无论如何,它适用于我而无需启用分析。只需编写一个Main包含main = defaultMain benchmarkswhere benchmarkshas type的模块[Benchmark],即您编写的基准测试列表。

然后编译该文件(例如,我们用 调用它benchmarks.hsghc --make -o bench benchmarks.hs并使用适当的参数运行程序./bench(有关详细信息,请参阅标准文档。一个好的默认参数是,比如说./bench -o benchmarks.html,它将生成一个类似于这个的漂亮报告)

于 2012-08-31T09:22:00.137 回答
8

这周我遇到了同样的问题,虽然我手动重新编译了所有内容,但 IRC 频道指示我执行以下操作:

  1. 转到您的 cabal 配置文件(以防您不知道在哪里)
  2. 编辑启用库分析的行(当你在它的时候,启用文档)
  3. 运行 Cabal 安装世界
于 2012-08-31T08:39:36.090 回答
6

正如您在评论中提到的问题中提到的,将来解决此问题的一个好方法是在 cabal 配置中启用分析。这样,所有库都安装了分析支持。这可能不是一个令人满意的解决方案,但我想很多人都会选择它。

如果您只想了解程序的内存使用情况,您可以使用-hT. 更准确地说,您必须编译程序-rtsopts以启用 RTS 选项,然后使用+RTS -hT. 编译器生成一个扩展名为hp. 您可以hp使用hp2ps. 这应该在没有任何分析支持的情况下工作,但请注意,我懒得验证它,因为我已经安装了所有支持分析的库;)

于 2012-08-31T08:41:39.847 回答