godebug — Golang Debugger

Golang bir süredir ilgimi çeken, fırsat buldukça öğrenmeye, bir şeyler yapmaya çalıştığım dillerin başında geliyor. Nedir Golang derseniz, Google bünyesinde geliştirilmiş bir yazılım dili. Temel özelliği ise script gibi yazılan ama oldukça hızlı derlenen bir dil olması. Ortaya çıkış sebebi ise, mevcut dillerde büyük projeler kodlandığında ortaya çıkan derlenme süresinin uzunluğu, deployment karmaşası, concurrency’nin 40 takla atarak sağlanıyor olmasını gösterebiliriz. Geçmişi 2007 yılına dayanıyor ve ben bu yazıyı yazarken güncel versiyon olarak 1.4.2 sürümü kullanılıyor. Go dilinin arkasında ise Rob Pike abimiz yer alıyor. Go’ya kısa bir göz atmak isterseniz şöyle bir Türkçe turu da mevcut. Go’yu özetlemek gerekirse, Python syntax’i ile C++ yazmaya benzetiyorum ben.

Kısa bir girişten sonra, neden böyle bir yazı yazdığıma gelelim. Go henüz yolun başında bir dil, ama oldukça güzel yol alıyor. Haliyle yolun başında olan bir dilin eksikleride oluyor. Bunların başında, bu yazınında konusu olan debug etmenin zorluğu yer alıyor. Bunun dışında bence en büyük sorunlarından biri ise, Go’ya özel bir IDE bulunmaması. Şuanda hemen hemen her text editör için Go plugin’i mevcut ancak bence yeterli değil. Her neyse bu başka bir yazının konusu olabilir belki.

Go ile yazılmış bir programı debug etmeniz için bir kaç farklı alternatifiniz var. Kısa bir süre önce MailGun Go dünyasına godebug adında güzel bir debugger kazandırdı. Bu yazının geri kalanı Go hakkında az da olsa bilgi sahibi, bir kaç hello world denemesi yapmış kişiler için daha uygun olacaktır. Temel seviyenin biraz daha üstünden anlatmaya devam edeceğim. Şimdi nasıl kullanacağız bir bakalım. Basit bir “hello world” uygulaması yazacağım bunun için.

package main
import “fmt”
func main() {
fmt.Println(“hello world”)
}

Uygulamamızı $ go run main.go komutu ile çalıştırdığımızda Terminal’e “hello world” yazısı basacak. Şimdi godebug kütüphanesini $GOPATH altına şu komut ile indirelim :

$ go get github.com/mailgun/godebug

Artık debuggerımız var, tek yapmamız gereken breakpoint koymak istediğimiz satıra _=”breakpoint” kodunu yazmak. Şimdi test etmek için uygulamamı biraz değiştiriyorum.

package main
import “fmt”
func main() {
_ = “breakpoint”
a := 5
b := 3
showResult(a,b)
}
func showResult(a int, b int) {
result := a+b
fmt.Println(result)
}

Altıncı satırda gördüğünüz gibi breakpoint var, şimdi uygulamam çalıştığı anda önce breakpoint’te duracak, sonra step step devam edeceğiz. godebug komutları, Go’nun kendi komutları ile birebir benzer. Örneğin Go programınızı çalıştırmak için kullandığınız $ go run *.go komutu, godebug için $ godebug run *.go şeklinde.

Debug etmeye başlayalım, Terminal’de $ godebug run main.go yazarak programımı çalıştırıyorum.

Breakpoint’in olduğu satıra geldiğinde Terminal’de şöyle bir şey görüyor olmanız lazım.

Debugger üzerinde önceden atanmış belli başlı komutları var, bunları listelemek için Terminal’e h yazıyorum. Karşıma kullanabileceğim komutların listesi geliyor.

Komutlar ve açıklamaları bence yeterince anlaşılır, hepsini tek tek açıklamayacağım. Örneğin l yani “list” komutunu verirsem içinde bulunduğum fonksiyonu ve hangi satırda durduğumu bana gösterecek.

n komutu ile bir sonraki satıra devam ediyorum. Eğer bir değişkenin değerine bakmak istersem print komutu ile değişkenin değerini ekrana yazdırıyorum. Örneğin bulunduğum satır itibari ile değerine bakmak istediğim değişken tanımlamamış ise “undefined” çıktısı alıyorum. Değişken tanımlanmış ise ekrana değerini basıyor. Aşağıda a değişkeni için adımları görebilirsiniz.

main() içinde çağırdığım showResult() fonksiyonuna geldiğimde, debugger’ın o fonksiyonun içine girmesini ve devam etmesini istiyorsam s komutu veriyorum.

Geldiğim noktayı, ve şuan içinde bulunduğum fonksiyonu bizlere gösteriyor yine godebug. Bir adım daha devam edip result değerini ekrana bastıralım.

Gördüğünüz gibi oldukça kolay bir kullanımı var. Başka debugger alternatifleri de olmakla birlikte ben tercihimi godebug dan yana kullanıyorum. Kullandığınız Go debugger alternatifleri var ise yorum yazmaktan ve neden tercih ettiğinizi belirtmekten çekinmeyin. Yeni yazılardan haberdar olmak için blogumu ziyaret edipBloga E-Posta İle Abone Ol” bölümünden abone olabilir, beni Twitter’dan takip edebilirsiniz.


Originally published at melihmucuk.com on July 20, 2015.

Show your support

Clapping shows how much you appreciated Melih Mucuk’s story.