堆栈 运行,在 haskell 中进行分析

stack run with profiling in haskell

我试过了运行宁

$ stack build --profile && stack run myexec --rts-options -p

但是我明白了

... 
Registering library for mylibrary-0.1.0.1..
Completed 2 action(s).      
myexec: the flag -p requires the program to be built with -prof
...

我知道我可以 运行

$ .stack-work/dist/x86_64-linux/Cabal-2.4.0.1/build/myexe/myexe +RTS -p

但是 stack run 有什么意义呢?我不想知道 cabal 的版本和体系结构等(这一切都发生在 makefile 中)。

您使用的命令 stack run 是一个方便的命令,它不仅 运行 二进制文件,而且在此之前构建它。因此,当您 运行 stack build --profile 时,它会使用所有必要的 ghc 标志编译二进制文件,但是当您调用 stack run 时,它会再次编译它,但现在没有所有分析标志。所以有两种方法可以正确地做到这一点:

  1. 不要运行stack build,因为它是多余的:
$ stack --profile run myexec --rts-options -p
  1. 或使用 +RTS 标志直接调用可执行文件,但确保将 --profile 传递给两个 stack 调用,否则 stack exec 将查找错误二进制文件(即非分析构建)的位置,将无法找到它。
$ stack --profile build
$ stack --profile exec -- myexec +RTS -p