Go:
Korzystanie z debugera
Jak to zrobić:
Go oferuje wbudowaną funkcjonalność do debugowania o nazwie delve
. Jest to pełnoprawne narzędzie debugujące, które umożliwia wykonanie programów w Go krok po kroku, inspekcję zmiennych programu oraz ocenę wyrażeń.
Aby zacząć, musisz najpierw zainstalować delve
. Możesz to zrobić, wykonując:
go get -u github.com/go-delve/delve/cmd/dlv
Teraz, debugujmy prosty program w Go. Załóżmy program main.go
:
package main
import "fmt"
func main() {
wiadomosc := "Debugowanie w Go"
fmt.Println(wiadomosc)
}
Aby rozpocząć debugowanie tego programu, otwórz terminal w katalogu projektu i wykonaj:
dlv debug
To polecenie kompiluje program z wyłączonymi optymalizacjami (aby poprawić doświadczenie z debugowaniem), uruchamia go i dołącza do niego debugger.
Gdy delve
jest uruchomione, znajdujesz się w interaktywnej powłoce debugera. Oto kilka podstawowych poleceń:
break main.main
ustawia punkt przerwania w funkcjimain
.continue
wznawia wykonanie programu do momentu trafienia na punkt przerwania.print wiadomosc
wydrukuje wartość zmiennejwiadomosc
.next
przechodzi do wykonania następnej linii programu.quit
wychodzi z debugera.
Wyjście, gdy trafiamy na punkt przerwania i drukujemy zmienną, może wyglądać tak:
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: => wiadomosc := "Debugowanie w Go"
7: fmt.Println(wiadomosc)
8: }
(dlv) print wiadomosc
"Debugowanie w Go"
Za pomocą tych poleceń możesz krok po kroku przeglądać swój program, inspekcjonując stan w miarę postępu, aby zrozumieć, jak się zachowuje i identyfikować ewentualne problemy.
Dogłębna analiza
Wybór delve
jako narzędzia do debugowania w Go zamiast tradycyjnych narzędzi takich jak GDB (GNU Debugger) wynika głównie z natury modelu wykonania i środowiska uruchomieniowego Go. GDB nie został początkowo zaprojektowany z myślą o środowisku uruchomieniowym Go, co sprawia, że delve
jest bardziej odpowiednim wyborem dla deweloperów w Go. Delve
jest specjalnie zaprojektowany dla Go, oferując bardziej intuicyjne doświadczenie debugowania dla gorutyn, kanałów i innych konstrukcji specyficznych dla Go.
Ponadto, delve
obsługuje szeroki zakres funkcji, wykraczających poza te oferowane przez podstawowy GDB podczas pracy z programami w Go. Obejmują one, między innymi: dołączanie do działających procesów w celu debugowania; warunkowe punkty przerwania; oraz ocenianie skomplikowanych wyrażeń, które mogą obejmować prymitywy współbieżności Go.
Chociaż delve
jest preferowanym debugerem wielu deweloperów Go, warto zauważyć, że narzędziownia Go również zawiera lżejsze formy wsparcia debugowania, takie jak wbudowane narzędzie pprof
do profilowania i narzędzie trace
do wizualizacji współbieżności. Te narzędzia czasami mogą zapewnić szybszą lub bardziej ogólną ścieżkę do diagnozowania problemów z wydajnością programu lub błędów współbieżności, co może być uzupełnieniem lub nawet preferowaną metodą w zależności od kontekstu debugowania.