Така че имам следния код от Предотвратяване на кеширането на изчисленията в сравнителния тест на 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
и след това добавя следните два реда към моя cabal файл:
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)
така че подозирам, че трябва да направя пълно сливане на критерия cabal файл с моя cabal файл по-горе, което се чувства малко прекомерно.
Има ли по-лесен начин да задам точка на прекъсване в Criterion, така че да мога да премина (при отстраняване на грешки в cabal repl/ghci) директно от моя източник в източника на критерия? Благодаря
p.s. Има свързан въпрос в Отстраняване на грешки в IO в пакетен модул в 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
. Така че за момента мога да постигна желаното поведение чрез обединяване на cabal файловете и добавяне наcc-options: -fPIC
към получения cabal файл. - person artella   schedule 07.04.2015