Haskell:
Een debugger gebruiken
Hoe:
Laten we een wandeling maken met GHCi, Haskell’s interactieve omgeving die kan dienen als een basale debugger. Je start het op met je Haskell-code en begint rond te neuzen. Hier is een voorbeeld:
main :: IO ()
main = do
putStrLn "Hé, hoe heet je?"
naam <- getLine
putStrLn $ "Hallo, " ++ naam ++ "! Laten we debuggen."
let resultaat = buggyFunctie 5
print resultaat
buggyFunctie :: Int -> Int
buggyFunctie n = n * 2 -- Doe alsof hier een bug zit
Om te beginnen met debuggen met GHCi:
$ ghci YourHaskellFile.hs
Stel een breekpunt in bij buggyFunctie
:
Prelude> :break buggyFunctie
Voer je programma uit:
Prelude> :main
Hé, hoe heet je?
Je programma pauzeert bij buggyFunctie
. Nu kun je variabelen inspecteren, door de code stappen en expressies evalueren.
Diepgaand:
Historisch gezien heeft Haskell’s reputatie voor pure functies en sterke typebinding geleid tot het geloof dat debugging-tools minder cruciaal waren. De realiteit is anders—complexe programma’s profiteren altijd van goede debugging-tools. GHCi biedt basale debugging-commando’s. Echter, voor een meer visuele ervaring of toepassingen op grotere schaal, wil je misschien IDE’s met geïntegreerde debuggers verkennen, zoals Visual Studio Code met Haskell-extensies of IntelliJ’s Haskell-plugin.
Alternatieven voor de debugger omvatten het gebruik van print statements, bekend als “printf debugging”, of het benutten van Haskell’s sterke type systeem om incorrecte staten onrepresenteerbaar te maken. Toch vervangt soms niets het doorlopen van de code.
Wat implementatiedetails betreft, werkt Haskell’s debugger met het runtime systeem. Het kan breakpoints aan, uitvoering stappen en variabele inspectie toestaan. Echter, aangezien Haskell lui geëvalueerd wordt, kunnen dingen een beetje niet-intuïtief worden. Het debuggen van een Haskell-programma betekent vaak opletten wanneer en hoe expressies worden geëvalueerd.