Go:
שימוש במנתח שגיאות

איך ל:

Go מספקת מתקן מובנה לניפוי תקלות בשם delve. זהו כלי לניפוי תקלות מלא תכונות שמאפשר לך לבצע תוכניות Go צעד אחר צעד, לבדוק משתני תוכנית, ולהעריך ביטויים.

להתחיל, עליך להתקין את delve קודם. תוכל לעשות זאת על ידי הפעלה של:

go get -u github.com/go-delve/delve/cmd/dlv

עכשיו, בואו ננפה תקלות בתוכנית Go פשוטה. בחרו בתוכנית main.go:

package main

import "fmt"

func main() {
    message := "Debugging in Go"
    fmt.Println(message)
}

להתחיל בניפוי תקלות של התוכנית הזאת, פתחו טרמינל בספריית הפרויקט והריצו:

dlv debug

פקודה זו מקומפלת את התוכנית עם ביטול אופטימיזציות (כדי לשפר את חוויית הניפוי), מתחילה אותה, ומחברת לה מנפה תקלות.

כאשר delve רץ, אתם נמצאים בקליפת המנפה האינטראקטיבית. הנה מספר פקודות בסיסיות:

  • break main.main מגדיר נקודת עצירה בפונקציה main.
  • continue ממשיך בהרצת התוכנית עד שנפגעת נקודת עצירה.
  • print message ידפיס את ערך המשתנה message.
  • next מתקדם בהרצת התוכנית לשורה הבאה.
  • quit יוצא מהמנפה.

הפלט כאשר מגיעים לנקודת העצירה ומדפיסים את המשתנה עשוי להיראות כך:

Breakpoint 1 at 0x49ecf3 for main.main() ./main.go:6
> main.main() ./main.go:6 (hits goroutine(1):1 total:1) (PC: 0x49ecf3)
     1: package main
     2:
     3: import "fmt"
     4:
     5: func main() {
     6: =>    message := "Debugging in Go"
     7:       fmt.Println(message)
     8: }
(dlv) print message
"Debugging in Go"

באמצעות הפקודות האלה, אתם יכולים ללכת דרך התוכנית שלכם, לבדוק את המצב בזמן שאתם הולכים כדי להבין איך היא מתנהלת, ולזהות בעיות כלשהן.

חקירה עמוקה

הבחירה ב-delve ככלי לניפוי תקלות מועדף על כלים מסורתיים כמו GDB (GNU Debugger) נובעת בעיקר מטבעה של מודל הביצוע והריצה של Go. GDB לא תוכנן במקור עם הרצת Go בראש, דבר שהופך את delve לבחירה מתאימה יותר למפתחי Go. Delve מתוכנן במיוחד עבור Go, ומציע חוויית ניפוי תקלות יותר אינטואיטיבית עבור גורוטינות של Go, ערוצים, וקונסטרוקטים נפוצים אחרים ב-Go.

בנוסף, delve תומך במגוון רחב של תכונות מעבר לאלה שמציע GDB בסיסי בעבודה עם תוכניות Go. כולל, אבל לא מוגבל ל: התמקדות בתהליכים רצים לצורך ניפוי תקלות; נקודות עצירה מותנות; והערכת ביטויים מורכבים שעשויים לכלול את אבני הבניין המתקדמות של המקביליות של Go.

למרות ש-delve הוא המנפה המועדף על רבים ממפתחי Go, כדאי לציין שכלי ה-GO כולל גם תמיכה קלה יותר בניפוי תקלות, כמו כלי ה-pprof המובנה לפרופילינג וכלי ה-trace להמחשת מקביליות. כלים אלה יכולים לפעמים לספק דרך מהירה יותר או ברמה גבוהה יותר לאבחון בעיות ביצועים או באגים שקשורים למקביליות, שעשויים להיות משלימים או אפילו מועדפים בהתאם להקשר הניפוי.