Haskell:
שימוש בדיבאגר
איך לעשות:
בואו נצעד עם GHCi, הסביבה האינטראקטיבית של Haskell שיכולה לשמש כמנפה תקלות בסיסי. אתם מפעילים אותה עם הקוד שלכם ב-Haskell ומתחילים לחקור. הנה דוגמה:
main :: IO ()
main = do
putStrLn "היי, מה השם שלך?"
name <- getLine
putStrLn $ "שלום, " ++ name ++ "! בואו ננפה."
let result = buggyFunction 5
print result
buggyFunction :: Int -> Int
buggyFunction n = n * 2 -- נא לדמיין שיש כאן באג
להתחיל בניפוי עם GHCi:
$ ghci YourHaskellFile.hs
הגדרת נקודת עצירה ב-buggyFunction
:
Prelude> :break buggyFunction
הרצת התוכנית שלך:
Prelude> :main
היי, מה השם שלך?
התוכנית שלך משהית ב-buggyFunction
. כעת תוכלו לבדוק משתנים, לצעוד דרך הקוד ולהעריך ביטויים.
צלילה עמוקה:
בהיסטוריה, המוניטין של Haskell בגינוי פונקציות טהורות וטיפוסיות חזקה הוביל לאמונה שכלים לניפוי תקלות הם פחות קריטיים. המציאות שונה - תוכניות מורכבות תמיד נהנות מכלים לניפוי תקלות טובים. GHCi מספקת פקודות לניפוי תקלות בסיסיות. עם זאת, לחוויה חזותית יותר או ליישומים בקנה מידה גדול יותר, ייתכן ותחפשו IDEs עם מנפי תקלות משולבים, כמו Visual Studio Code עם הרחבות Haskell או תוסף ה-Haskell של IntelliJ.
חלופות למנפה תקלות כוללות שימוש בהדפסות, הידועות כ-“ניפוי עם printf”, או שימוש במערכת הטיפוסים החזקה של Haskell כדי להפוך מצבים שגויים לבלתי ניתנים לייצוג. עם זאת, לפעמים אין תחליף לצעידה דרך הקוד.
לגבי פרטי יישום, מנפה התקלות של Haskell עובד עם מערכת הזמן הרץ. הוא יכול לטפל בנקודות עצירה, בצעידת הביצוע ולאפשר בדיקת משתנים. עם זאת, מכיוון ש-Haskell מתבצע באופן עצלני, ייתכן והדברים יהיו קצת לא אינטואיטיביים. לנפות תוכנית Haskell לעיתים קרובות אומר לשמור עין על מתי ואיך ביטויים מתבצעים.