Профилирование исполняемого файла с помощью Cabal

После некоторых недавних изменений в Cabal я совершенно не понимаю, как профилировать исполняемый файл. В ~/.cabal/config у меня включено профилирование:

amy@wombat$ grep prof ~/.cabal/config
library-profiling: True
executable-profiling: True

Но если я попытаюсь запустить свой исполняемый файл с профилированием, я получу...

amy@wombat$ cabal run realtra-benchmark +RTS -p
cabal: the flag -p requires the program to be built with -prof
cabal: 
cabal: Usage: <prog> <args> [+RTS <rtsopts> | -RTS <args>] ... --RTS <args>
<snip>

Я получаю тот же ответ, если пытаюсь обойти клику: ./dist/dist-sandbox-c8599c64/build/realtra-benchmark/realtra-benchmark +RTS -p.

Конечно, добавление флага -prof к GHC-Options: в моем файле клики не сработает:

amy@wombat$ cabal build --ghc-options=-Werror && cabal test && cabal install
./realtra.cabal has been changed. Re-configuring with most recently used
options. If this fails, please run configure manually.
Resolving dependencies...
Configuring creatur-realtra-1.0.8...
Warning: 'ghc-options: -prof' is not necessary and will lead to problems when
used on a library. Use the configure flag --enable-library-profiling and/or
--enable-executable-profiling.

Я полагаю, что мне не нужно добавлять эти флаги, поскольку они находятся в моем файле конфигурации, но на всякий случай я попробую:

amy@wombat$ cabal configure --enable-executable-profiling --enable-library-profiling
Resolving dependencies...
Configuring creatur-realtra-1.0.8...
amy@wombat$ cabal build --ghc-options=-Werror && cabal test && cabal install
<snip>
amy@wombat$ cabal run realtra-benchmark +RTS -p
cabal: the flag -p requires the program to be built with -prof
cabal: 
cabal: Usage: <prog> <args> [+RTS <rtsopts> | -RTS <args>] ... --RTS <args>
<snip>

Что мне не хватает?


person mhwombat    schedule 08.04.2014    source источник
comment
Вы пробовали это:cabal run realtra-benchmark +RTS -p -RTS   -  person Sibi    schedule 08.04.2014
comment
Флаг -RTS нужен только тогда, когда вы используете флаги, не относящиеся к среде выполнения. Но просто чтобы убедиться, я только что попробовал это с -RTS в конце и получил ту же ошибку.   -  person mhwombat    schedule 08.04.2014
comment
Попробуйте cabal run realtra-benchmark -- +RTS -p. Я предполагаю, что +RTS интерпретируется как аргумент для самого исполняемого файла cabal.   -  person Mikhail Glushenkov    schedule 08.04.2014
comment
Или, может быть, cabal run realtra-benchmark +RTS --RTS -- +RTS -p.   -  person Mikhail Glushenkov    schedule 08.04.2014
comment
@Mikhail, оба ваших предложения сработали. Если вы хотите добавить это как ответ, я приму это. Я подозреваю, что эта информация поможет и другим, потому что я много гуглил (или, скорее, DuckDuckGo'd) в поисках ответа.   -  person mhwombat    schedule 09.04.2014


Ответы (1)


Проблема в том, что бит +RTS -p интерпретируется как аргументы для самого исполняемого файла cabal. Чтобы перенаправить эти аргументы в исполняемый файл realtra-benchmark, используйте cabal run realtra-benchmark -- +RTS -p. Как правило, вы всегда должны ставить двойное тире перед аргументами, которые вы хотите пересылать, когда используете cabal run (по крайней мере, до эта проблема исправлена).

person Mikhail Glushenkov    schedule 09.04.2014