Go:
Debuggerin käyttö

Kuinka:

Go tarjoaa sisäänrakennetun virheenjäljitystyökalun nimeltä delve. Se on täysiverinen virheenjäljitystyökalu, jonka avulla voit suorittaa Go-ohjelmia askel askeleelta, tarkastella ohjelman muuttujia ja arvioida lausekkeita.

Aloittaaksesi sinun täytyy ensin asentaa delve. Voit tehdä sen suorittamalla:

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

Nyt, katsotaanpa kuinka virheenjäljitämme yksinkertaisen Go-ohjelman. Otetaan esimerkiksi ohjelma main.go:

package main

import "fmt"

func main() {
    message := "Virheenjäljitys Go:ssa"
    fmt.Println(message)
}

Aloittaaksesi tämän ohjelman virheenjäljityksen, avaa terminaali projektikansiossa ja suorita:

dlv debug

Tämä komento kääntää ohjelman optimoinnit pois päältä (parantaakseen virheenjäljityskokemusta), käynnistää sen ja liittää siihen virheenjäljittimen.

Kun delve on käynnissä, olet interaktiivisessa virheenjäljittimen kuorissa. Tässä muutama peruskomento:

  • break main.main asettaa keskeytyskohdan main-funktioon.
  • continue jatkaa ohjelman suoritusta kunnes keskeytyskohta osuu kohdalle.
  • print message tulostaa message-muuttujan arvon.
  • next vie ohjelman suorituksen seuraavalle riville.
  • quit poistuu virheenjäljittimestä.

Tuloste, kun keskeytyskohta osuu kohdalle ja muuttujan arvo tulostetaan, saattaa näyttää tältä:

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 := "Virheenjäljitys Go:ssa"
     7:       fmt.Println(message)
     8: }
(dlv) print message
"Virheenjäljitys Go:ssa"

Näiden komentojen avulla voit astua läpi ohjelmasi, tarkastellen sen tilaa ymmärtääksesi sen käyttäytymistä ja tunnistaaksesi mahdolliset ongelmat.

Syväsukellus

Delve-valinta Go:n virheenjäljitystyökaluksi perinteisten työkalujen, kuten GDB:n (GNU Debugger), sijaan johtuu pääasiassa Go:n suoritusmallista ja ajonaikaisesta ympäristöstä. GDB:tä ei alun perin suunniteltu Go:n ajonaikaisen ympäristön huomioon ottamiseksi, mikä tekee delvestä sopivamman valinnan Go-kehittäjille. Delve on suunniteltu nimenomaan Go:lle ja tarjoaa intuitiivisemman virheenjäljityskokemuksen Go-rutiineille, kanaville ja muille Go-erityisille rakenteille.

Lisäksi delve tukee laajaa ominaisuuksien kirjoa, joita perus-GDB ei tarjoa työskennellessä Go-ohjelmien kanssa. Näihin kuuluu, mutta ei rajoitu: kiinnittyminen käynnissä oleviin prosesseihin virheenjäljitystä varten; ehdolliset keskeytyskohdat; ja monimutkaisten lausekkeiden arviointi, jotka voivat sisältää Go:n rinnakkaisuusprimitiivejä.

Vaikka delve on monien Go-kehittäjien valintana virheenjäljittimenä, on syytä huomata, että Go-työkalusarja sisältää myös kevyempiä virheenjäljitystukimuotoja, kuten sisäänrakennetun pprof-työkalun profilointiin ja trace-työkalun rinnakkaisuuden visualisointiin. Nämä työkalut voivat joskus tarjota nopeamman tai korkeamman tason tavan diagnosoida ohjelman suorituskykyongelmia tai rinnakkaisuusvirheitä, mikä saattaa olla täydentävä tai jopa suositeltavampi riippuen virheenjäljitysyhteydestä.