haskellhaskell-stackthreadscope

Profiling with ThreadScope with command line arguments in Haskell


I understand from here that to use ThreadScope I need to compile with an eventlog and rtsoptions, eg "-rtsopts -eventlog -threaded"

I am using Stack, so my compilation call looks like:

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

Whereas normally, I do:

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

This compiles fine. However, my program takes 2 and only 2 positional arguments:

./mycoolprogram arg1 arg2

I'm trying to add the RTS options +RTS -N2 -l, like so:

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

Or

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

How can I simultaneously run my program with arguments going into System.Environment.getArgs (like eg here) and also include these profiling flags?


Solution

  • As @sjakobi said you can use the +RTS ... -RTS other arguments or other arguments +RTS ... forms but there is also the option to pass them in an environment variable GHCRTS:

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

    Lost of more info is available in the GHC users guide.