我希望剖析我用Haskell编写的程序。个人档案Haskell没有安装所有依赖项的安装分析库
在编译时,我被告知我没有针对某些依赖性(例如criterion
)安装的分析库以及cabal
中止。
我对分析这些依赖关系的部分没有兴趣;从main
调用的代码甚至不使用它们。
如何在不安装概要分析库的情况下对我的应用程序进行概要分析我不需要并且不移除所有这些依赖关系?
我希望剖析我用Haskell编写的程序。个人档案Haskell没有安装所有依赖项的安装分析库
在编译时,我被告知我没有针对某些依赖性(例如criterion
)安装的分析库以及cabal
中止。
我对分析这些依赖关系的部分没有兴趣;从main
调用的代码甚至不使用它们。
如何在不安装概要分析库的情况下对我的应用程序进行概要分析我不需要并且不移除所有这些依赖关系?
一个很好的方法来规避编译一切与分析是使用cabal沙箱。它允许您为一个应用程序设置沙盒,因此您不必重新安装整个~/.cabal
前缀。你需要最近版本的Cabal,所以先运行cabal update && cabal install cabal-install
。
一旦你初始化一个沙箱中,创建一个文件cabal.config
,包括必要的指令(在你的情况library-profiling: True
; executable-profiling: True
也可能派上用场。)
这样做的副作用是,你可以测试你的代码不需要全局安装的依赖关系,例如实验版本或过时版本。
编辑:顺便说一句,我不认为你需要分析启用criterion
工作。无论如何,它适用于我没有分析被启用。只需编写一个包含main = defaultMain benchmarks
的Main
模块,其中benchmarks
的类型为[Benchmark]
,即您编写的基准测试列表。
然后,您将这些文件(比如说,我们把它叫做benchmarks.hs
与ghc --make -o bench benchmarks.hs
,并运行程序,./bench
使用适当的参数(详情参阅标准文档。一个好的默认参数为,说./bench -o benchmarks.html
这将产生一个漂亮的?报告类似this one)
这个星期我有同样的问题,虽然我已经重新编译手的一切,我奉命在IRC频道执行以下操作:
正如你提到的问题中提及在您的评论中,未来解决此问题的一个好方法是在cabal配置中启用分析。这样所有的库都安装了分析支持。这可能不是一个令人满意的解决方案,但我想很多人都选择它。
如果您只想了解程序的内存使用情况,则可以使用-hT
生成程序的堆配置文件。更确切地说,您必须编译程序-rtsopts
以启用RTS选项,然后使用+RTS -hT
执行它。编译器生成一个扩展名为hp
的文件。您可以使用hp2ps
将hp
文件转换为带有堆配置文件的postscript文件。这应该没有任何分析支持,但请注意,我懒得验证它,因为我已经安装了所有支持分析支持的库; )
已验证,它是真的。 –
哇,你是对的!堆配置文件不需要'-prof',所以如果我只需要空间剖析就不会出现上述问题。尼斯。 – nh2
请注意,这只适用于'-hT',即基于类型的堆分析。还有其他的分析类型,如保留器分析,仍然需要'-prof'。 –
你不能简单地安装它们,什么问题 –
1)我不需要他们,2)安装他们是令人难以置信的繁琐:http://stackoverflow.com/questions/1704421/cabal-not-installing-dependencies-when-needs-profiling-libraries – nh2
尽管我同意这很乏味,但你声称你不需要它们,这显然是错误的。 –