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 เป็นเครื่องมือเดบักสำหรับ Go มากกว่าเครื่องมือแบบดั้งเดิมอย่าง GDB (GNU Debugger) เป็นหลักเนื่องจากลักษณะของรูปแบบการดำเนินการและรันไทม์ของ Go GDB ไม่ได้ถูกออกแบบมาพร้อมกับการพิจารณารันไทม์ของ Go ในใจ ทำให้ delve เป็นตัวเลือกที่เหมาะสมกว่าสำหรับนักพัฒนา Go Delve ถูกออกแบบมาเฉพาะสำหรับ Go โดยเสนอประสบการณ์การเดบักที่มีสัญชาตญาณมากขึ้นสำหรับ Go routines, ช่องสัญญาณ, และสิ่งก่อสร้างอื่นๆที่เฉพาะเจาะจงของ Go

นอกจากนี้ delve ได้รับการสนับสนุนคุณสมบัติที่หลากหลายมากกว่าที่ GDB มีให้เมื่อทำงานกับโปรแกรม Go ไม่ว่าจะเป็น: การแนบไปยังกระบวนการที่กำลังทำงานเพื่อการเดบัก; จุดหยุดแบบมีเงื่อนไข; และการประเมินนิพจน์ที่ซับซ้อนซึ่งอาจรวมถึงเวทีการแข่งขันของ Go

ในขณะที่ delve เป็นเดบักเกอร์ที่หลายๆนักพัฒนา Go ใช้กัน ก็ควรทราบว่าชุดเครื่องมือ Go ยังรวมถึงการสนับสนุนการเดบักที่เบากว่าด้วย เช่น เครื่องมือ pprof ในตัวสำหรับการโปรไฟล์และเครื่องมือ trace สำหรับการมองเห็นคอนเคอเรนซี เครื่องมือเหล่านี้บางครั้งอาจให้ทางเลือกที่เร็วกว่าหรือมองจากมุมสูงสำหรับการวินิจฉัยปัญหาด้านประสิทธิภาพโปรแกรมหรือบั๊กคอนเคอเรนซี ซึ่งอาจเสริมหรือแม้แต่เหมาะสมกว่าขึ้นอยู่กับบริบทการเดบัก