Haskell:
Debuggerin käyttö

Kuinka:

Kävellään läpi GHCi:n kanssa, Haskellin interaktiivisen ympäristön, joka voi toimia perusdebuggerina. Käynnistät sen Haskell-koodisi kanssa ja alat tutkia sitä. Tässä on esimerkki:

main :: IO ()
main = do
    putStrLn "Hei, mikä on nimesi?"
    nimi <- getLine
    putStrLn $ "Hei, " ++ nimi ++ "! Aletaan debugata."
    let tulos = viallinenFunktio 5
    print tulos

viallinenFunktio :: Int -> Int
viallinenFunktio n = n * 2 -- Kuvittele, että tässä on bugi

Aloittaaksesi debuggauksen GHCi:n kanssa:

$ ghci YourHaskellFile.hs

Aseta katkaisukohta viallinenFunktio-funktioon:

Prelude> :break viallinenFunktio

Suorita ohjelmasi:

Prelude> :main
Hei, mikä on nimesi?

Ohjelmasi keskeytyy viallinenFunktio-kohtaan. Nyt voit tarkastella muuttujia, seurata koodia askel askeleelta ja arvioida lausekkeita.

Syväsukellus:

Historiallisesti Haskellin maine puhtaiden funktioiden ja vahvan tyypityksen ansiosta johti uskomukseen, että debuggaustyökalut olivat vähemmän kriittisiä. Todellisuus on toinen—monimutkaiset ohjelmat hyötyvät aina hyvistä debuggaustyökaluista. GHCi tarjoaa perus debuggauskomentoja. Kuitenkin, visuaalisempaa kokemusta tai laajamittaisempien sovellusten varten saatat tutkia IDE:tä, jolla on integroidut debuggerit, kuten Visual Studio Code Haskell-laajennuksilla tai IntelliJ:n Haskell-liitännäisellä.

Vaihtoehtoja debuggerille ovat print-lauseiden käyttö, tunnetaan nimellä “printf-debuggaus”, tai hyödyntäen Haskellin vahvaa tyypitysjärjestelmää tekemään virheelliset tilat esittämättömiksi. Silti, joskus koodin läpi kulkeminen korvaamattomana.

Mitä toteutuksen yksityiskohtiin tulee, Haskellin debuggeri toimii suoritusaikajärjestelmän kanssa. Se voi käsitellä katkaisukohtia, askel suoritusta ja sallia muuttujatarkastelun. Kuitenkin, koska Haskell on laiskasti arvioitu, asiat voivat olla hieman epäintuitiivisia. Haskell-ohjelman debuggaus tarkoittaa usein silmälläpitämistä siitä, milloin ja miten lausekkeet arvioidaan.

Katso myös: