Итак, у меня есть следующий код из Предотвращение кэширования вычислений в тесте Criterion, и моя цель - иметь возможность перейти от main
непосредственно к функция defaultMain
в Criterion.Main
:
{-# OPTIONS -fno-full-laziness #-}
{-# OPTIONS_GHC -fno-cse #-}
{-# LANGUAGE BangPatterns #-}
module Main where
import Criterion.Main
import Data.List
num :: Int
num = 100000000
lst :: a -> [Int]
lst _ = [1,2..num]
myadd :: Int -> Int -> Int
myadd !x !y = let !result = x + y in
result
mysum = foldl' myadd 0
main :: IO ()
main = defaultMain [
bgroup "summation"
[bench "mysum" $ whnf (mysum . lst) ()]
]
и файл кабалы:
name: test
version: 0.1.0.0
build-type: Simple
cabal-version: >=1.10
executable test
main-is: Main.hs
build-depends: base >=4.8 && <4.9,
criterion==1.1.0.0
default-language: Haskell2010
ghc-options: "-O3"
(с использованием ghc 7.10.1 и cabal 1.22.0.0).
Если изнутри cabal repl
я пытаюсь установить точку останова в критерии, я получаю следующую ошибку:
*Main> :break Criterion.Main.defaultMain
cannot set breakpoint on defaultMain: module Criterion.Main is not interpreted
Кроме того, если я попытаюсь add
установить пакет, я получу следующую ошибку:
*Main> :add *Criterion
<no location info>: module ‘Criterion’ is a package module
Failed, modules loaded: Main.
Если я сделаю это в каталоге git clone https://github.com/bos/criterion
, а затем добавлю следующие две строки в мой файл клики:
other-modules: Criterion
hs-source-dirs: .
./criterion
то при выполнении cabal build
я получаю следующие ошибки:
criterion/Criterion/IO.hs:23:0:
error: missing binary operator before token "("
#if MIN_VERSION_binary(0, 6, 3)
поэтому я подозреваю, что мне нужно выполнить полное слияние файла клики критерия с моим файлом клики выше, что кажется немного чрезмерным.
Есть ли более простой способ установить точку останова в Criterion, чтобы я мог перейти (при отладке в cabal repl/ghci) прямо из моего источника в источник критерия? Спасибо
p.s. Есть связанный с этим вопрос в разделе Отладка ввода-вывода в модуле пакета внутри GHCi, но, к сожалению, это не помогло.
cabal
, но, насколько мне известно, GHCi может только отлаживать код в своем внутреннем формате байт-кода. В частности, вы хотите избежать собственной компиляции сcabal build
, так как результирующие файлы.o
будут использоваться по умолчанию вместо байт-кода. - person Ørjan Johansen   schedule 07.04.2015criterion-1.1.0.0/cbits/time-posix.o: relocation R_X86_64_PC32 against undefined symbol clock_gettime@@GLIBC_2.2.5 can not be used when making a shared object; recompile with -fPIC
, что я сейчас и пытаюсь решить! - person artella   schedule 07.04.2015time-posix.o
в комментарии выше — это добавить параметрcc-options: -fPIC
. Итак, на данный момент я могу добиться желаемого поведения, объединив файлы кликов и добавивcc-options: -fPIC
к полученному файлу кликов. - person artella   schedule 07.04.2015