2014-04-08 22 views
6

Po kilku ostatnich zmianach w cabal, całkowicie nie rozumiem, jak profilować plik wykonywalny. W ~/.cabal/config, mam włączone profilowanie:Profilowanie pliku wykonywalnego z kabałą

[email protected]$ grep prof ~/.cabal/config 
library-profiling: True 
executable-profiling: True 

Ale gdy próbuję uruchomić mój plik wykonywalny z profilowaniem, mam ...

[email protected]$ 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> 

otrzymuję taką samą odpowiedź, jeśli staram się obejścia cabal: ./dist/dist-sandbox-c8599c64/build/realtra-benchmark/realtra-benchmark +RTS -p.

Oczywiście, dodając -prof flagę do GHC-Options: w moim pliku cabal nie zadziała:

[email protected]$ 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. 

I rysunek I nie powinno się dodawać te flagi, ponieważ są one w moim pliku config, ale na wszelki wypadek, próbuję:

[email protected]$ cabal configure --enable-executable-profiling --enable-library-profiling 
Resolving dependencies... 
Configuring creatur-realtra-1.0.8... 
[email protected]$ cabal build --ghc-options=-Werror && cabal test && cabal install 
<snip> 
[email protected]$ 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> 

Czego mi brakuje?

+0

Czy próbowałeś tego: 'cabal run realtra-benchmark + RTS -p -RTS' – Sibi

+1

Flaga' -RTS' jest potrzebna tylko wtedy, gdy podążasz za flagami innymi niż runtime. Ale żeby się upewnić, spróbowałem właśnie teraz z '-RTS' na końcu i dostałem ten sam błąd. – mhwombat

+2

Spróbuj 'cabal run realtra-benchmark - + RTS -p'. Domyślam się, że '+ RTS' zostanie zinterpretowany jako argument do samego pliku' cabal'. –

Odpowiedz

7

Problem polega na tym, że bit +RTS -p zostanie zinterpretowany jako argumenty samego pliku wykonywalnego cabal. Aby przekazać te argumenty do pliku wykonywalnego realtra-benchmark, użyj cabal run realtra-benchmark -- +RTS -p. Ogólnie rzecz biorąc, zawsze powinieneś wstawiać podwójną kreskę przed argumentami, które chcesz przekazać dalej, gdy używasz cabal run (przynajmniej do czasu, gdy this issue zostanie naprawiony).