使用堆栈进行分析

Profiling with Stack

我正在尝试在 Stack 中进行分析,以便我可以获得与 RWH Chapter 25 上指示的指标相同的指标。我新建了一个Stack项目,如下:

stack new test

然后,如图here我运行:

stack install --executable-profiling --library-profiling --ghc-options="-rtsopts"

但是此命令失败并出现以下错误:

    While constructing the BuildPlan the following exceptions were encountered:

--  While attempting to add dependency,
    Could not find package base in known packages

--  Failure when adding dependencies:    
      base: needed (>=4.7 && <5), stack configuration has no specified version (latest applicable is 4.9.0.0)
    needed for package test-0.1.0.0

Recommended action: try adding the following to your extra-deps in /home/damian/test/stack.yaml
- base-4.9.0.0

You may also want to try the 'stack solver' command

我已经尝试了上面的建议,但没有成功。

如果我 运行 stack build 那么程序构建没有错误。

作为一个附加问题,我想知道是否不可能 运行 stack teststack exec 使用上面的标志(这似乎比安装可执行文件更合乎逻辑剖析它)。

它适用于我 lts-6.4。对我来说,这表明您没有安装 base 的分析版本。这需要在安装 GHC 时安装。 stack exec -- which ghc 说什么?如果 ghc 不在您的堆栈根目录 ~/.stack/programs 中,那么这意味着您使用的是自定义 GHC 安装,它可能缺少 base 的分析版本。要解决,可以:

1) 删除自定义安装和 运行 "stack setup" 2) 或者,设置 system-ghc: false 和 运行 "stack setup"

stack install等同于stack build --copy-bins,所以你应该可以运行

stack build --executable-profiling --library-profiling --ghc-options="-rtsopts"

这将在您的 .stack-work/ 目录下的某处生成一个已编译的可执行文件(stack 会告诉您位置)。然后您应该能够 运行 它并获得您期望的 .prof 文件。

似乎对我有用的唯一选择是:

stack exec --profile NameOfYourAppGoesHere -- +RTS -p