在 Haskell 中使用带有命令行参数的 ThreadScope 进行分析

Profiling with ThreadScope with command line arguments in Haskell

我从 here 了解到,要使用 ThreadScope,我需要使用事件日志和 rtsoptions 进行编译,例如“-rtsopts -eventlog -threaded

我正在使用 Stack,所以我的编译调用如下所示:

$ stack ghc -- -O2 -funfolding-use-threshold=16 -optc-O3 -rtsopts -eventlog -threaded mycoolprogram.hs

而通常情况下,我会:

$ stack ghc -- -O2 -funfolding-use-threshold=16 -optc-O3 -threaded mycoolprogram.hs

编译正常。但是,我的程序需要 2 个且只有 2 个位置参数:

./mycoolprogram arg1 arg2

我正在尝试添加 RTS 选项 +RTS -N2 -l,如下所示:

./mycoolprogram arg1 arg2 -- +RTS -N2 -l 

./mycoolprogram +RTS -N2 -l -- arg1 arg2

我如何才能同时 运行 我的程序,参数进入 System.Environment.getArgs(例如 )并包含这些分析标志?

正如@sjakobi 所说,您可以使用 +RTS ... -RTS other argumentsother arguments +RTS ... 形式,但也可以选择将它们传递到环境变量 GHCRTS:

GHCRTS='-N2 -l' ./mycoolprogram arg1 arg2

丢失的更多信息可在 GHC users guide 中找到。