Go:
Att använda en debugger
Hur man gör:
Go erbjuder en inbyggd möjlighet för felsökning som kallas delve
. Det är ett fullfjädrat felsökningsverktyg som tillåter dig att exekvera Go-program steg för steg, inspektera programvariabler och utvärdera uttryck.
För att börja måste du först installera delve
. Detta kan du göra genom att köra:
go get -u github.com/go-delve/delve/cmd/dlv
Nu, låt oss felsöka ett enkelt Go-program. Betrakta ett program main.go
:
package main
import "fmt"
func main() {
message := "Debugging in Go"
fmt.Println(message)
}
För att börja felsöka detta program, öppna en terminal i projektets katalog och exekvera:
dlv debug
Detta kommando kompilerar programmet med optimeringar inaktiverade (för att förbättra felsökningsupplevelsen), startar det, och kopplar en felsökare till det.
När delve
körs, är du i det interaktiva felsökningsskalet. Här är några grundläggande kommandon:
break main.main
sätter en brytpunkt vid funktionenmain
.continue
återupptar programexekveringen till dess att en brytpunkt träffas.print message
skriver ut värdet på variabelnmessage
.next
framskrider programexekveringen till nästa rad.quit
avslutar felsökaren.
Utskriften när brytpunkten träffas och variabeln skrivs ut kan se ut så här:
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"
Med dessa kommandon kan du stega igenom ditt program, inspektera tillståndet efterhand för att förstå hur det beter sig och identifiera eventuella problem.
Fördjupning
Valet av delve
som Go:s föredragna felsökningsverktyg framför traditionella verktyg som GDB (GNU Debugger) beror framför allt på Go:s exekveringsmodell och körningstid. GDB designades inte från början med Go:s körningstid i åtanke, vilket gör delve
till ett mer lämpligt val för Go-utvecklare. Delve
är specifikt utformat för Go och erbjuder en mer intuitiv felsökningsupplevelse för Go-rutiner, kanaler och andra Go-specifika konstruktioner.
Dessutom stöder delve
ett brett utbud av funktioner utöver de som erbjuds av grundläggande GDB när man arbetar med Go-program. Dessa inkluderar men är inte begränsade till: att koppla till körande processer för felsökning; villkorliga brytpunkter; och att utvärdera komplexa uttryck som kan involvera Go:s samtidighetsprimitiver.
Även om delve
är det go-to felsökningsverktyget för många Go-utvecklare, är det värt att notera att Go-verktygskedjan också inkluderar lättviktsformer av felsökningsstöd, såsom det inbyggda verktyget pprof
för profilering och verktyget trace
för visualisering av samtidighet. Dessa verktyg kan ibland erbjuda en snabbare eller mer övergripande lösning för att diagnostisera prestandaproblem i program eller samtidighetsbuggar, vilka kan vara kompletterande eller till och med att föredra beroende på felsökningssammanhanget.