【问题标题】:Profile Haskell without installing profiling libraries for all dependencies在不为所有依赖项安装分析库的情况下分析 Haskell
【发布时间】:2012-08-25 19:41:08
【问题描述】:

我希望分析我用 Haskell 编写的程序。

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

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

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

【问题讨论】:

  • 你不能。安装就行了,有什么问题?
  • 1) 我不需要它们,2) 安装它们非常繁琐:stackoverflow.com/questions/1704421/…
  • 虽然我同意这很乏味,但您声称不需要它们的说法显然是错误的。
  • 如果你发布它,我会接受这个作为答案。它不能解决我的问题,但答案似乎“还不可能”。
  • 为什么不使用 -prof 而不是标准?平台文档的Chapter 5。等等,你用的是什么 Haskell 编译器?哈斯克尔平台?什么版本?

标签: haskell profiling


【解决方案1】:

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

  1. 转到你的阴谋集团配置文件(in case you don't know where)
  2. 编辑启用库分析的行(并在您使用它时启用文档)
  3. 运行 Cabal 安装世界

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 哇,你是对的!堆配置文件不需要-prof,所以如果我只需要空间配置文件就不会出现上述问题。不错。
    • 请注意,这仅适用于-hT,即基于类型的堆分析。还有其他分析类型,如保留器分析,仍然需要 -prof
    【解决方案3】:

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

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

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

    编辑:顺便说一句,我认为您不需要启用分析才能使criterion 工作。在任何情况下,它都适用于我 未启用分析。只需编写一个包含main = defaultMain benchmarksMain 模块,其中benchmarks 的类型为[Benchmark],即您编写的基准测试列表。

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

    【讨论】:

    • 我想命名criterion 暗示了错误的事情:这只是我不想描述的依赖关系的一个例子。我宁愿说类似“我的应用程序使用hunit 进行测试,但我不希望分析测试代码本身,因此希望避免在启用分析的情况下安装它”
    • 仅当您想比较两个函数时间方面时,标准才适用。它并没有告诉你太多关于为什么你的代码是慢/快的。为了找到内存泄漏或惰性 thunk,您仍然需要堆分析,这需要 -prof 开关。
    • 对于现在阅读此内容的任何人:cabal-dev 在很大程度上已被 Cabal 本身的 沙盒 取代。
    • 好电话! Here's the documentation 在新阴谋集团的沙盒上。确保您使用的至少是 1.18 版
    猜你喜欢
    • 2018-05-18
    • 2010-12-14
    • 1970-01-01
    • 2018-06-03
    • 1970-01-01
    • 2015-02-07
    • 2012-02-23
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多