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
สำหรับการมองเห็นคอนเคอเรนซี เครื่องมือเหล่านี้บางครั้งอาจให้ทางเลือกที่เร็วกว่าหรือมองจากมุมสูงสำหรับการวินิจฉัยปัญหาด้านประสิทธิภาพโปรแกรมหรือบั๊กคอนเคอเรนซี ซึ่งอาจเสริมหรือแม้แต่เหมาะสมกว่าขึ้นอยู่กับบริบทการเดบัก