[tutorial tips-dan-trik]

Cara Melakukan Debug Golang Pada Vscode

Mungkin Anda pasti pernah melihat aplikasi yang sudah live terdapat error atau aplikasi tersebut berhenti ditengah-tengah proses yang sedang kita jalankan. Tentunya hal ini menjadi tidak nyaman karena kita harus mengulang proses tersebut dari awal. Proses yang secara tiba-tiba berhenti itu biasanya dinamakan dengan bug. Bug sendiri adalah suatu error yang terjadi akibat suatu error yang terjadi akibat tidak sempurnyanya sebuah instruksi atau proses yang dijalankan. Penyebab bug itu banyak sekali faktornya, mungkin dari proses pembuatannya tidak sempurna, atau ketika menjalankan suatu proses yang membutuhkan sesuatu misalnya resource dan kebutuhan itu tidak dapat dipenuhi maka akan timbul bug.

Proses untuk mencari bug tersebut biasanya dinamakan debugging atau proses pencarian dalam baris kode yang menyebabkan error itu terjadi. Seorang programmer pasti akan familiar dengan kata-kata ini karena memang bisa jadi itu adalah pekerjaan sehari-hari yang bisasa lakukan. Ketika terjadi bug langkah yang dilakukan biasanya lihat reporting dari yang melaporkan bisa dari user langsung atau sesama developer yg menemukan bug tersebut. Setelah itu programmer langsung menelusuri kode yang sudah dibuat dan yang sedang live lalu baru melakukan debugging bisa dilokal atw di environment lokal.

Nah, pada postingan kali ini Santekno akan memberikan tutorial cara melakukan debuging golang pada VSCode, Sebelum melanjutkan bagaimana cara debug pada Visual Studio Code, beberapa yang perlu disipakan

Persiapan

  • Anda paham beberapa syntax golang dan penulisannya
  • Usahakan sudah install go di komputer Anda
  • Lakukan set GOPATH. (secara default biasanya di ~/go)
  • Buka aplikasi Visual Studio Code
  • Install plugin VSCode-Go

Setelah semuanya telah terinstall, ketika Anda membuka fail .go di VSCode, maka Anda akan melihat dibagian bawah kanan di dalam status bar Install Analysis Tools. Coba klik dan link tersebut akan melakukan beberapa instal packages Go agar nanti saat melanjutkan bisa lebih efektif dan efisien.

Ada satu plugin yang perlu Anda install yaitu Delve. Plugin ini open-source debugger untuk pengguna Go language. Jika Anda ingin lebih tau cara install lebih lanjut bisa lihat.

Membuat Contoh Kode aplikasi

Santekno akan membuat 2 kode sample golang:

  1. Program Go untuk melakukan generate a JSON
  2. Kita akan menulis suatu fungsi dan membuat unit test dan bagaimana cara kita melakukan debug test di VS Code

Berikut ini source code untuk contoh program yang pertama. Buat file main.go seperti dibawah ini

package main

import (
	"encoding/json"
	"fmt"
	"log"
)

type Pandawa struct {
	Nama         string `json:"nama"`
	Julukan      string `json:"nama_julukan"`
	Titisan      string `json:"titisan"`
	DiangkatRaja bool   `json:"raja"`
}

func (p *Pandawa) diAngkatRaja() {
	p.DiangkatRaja = true
}

func main() {
	pandawas := []Pandawa{
		{
			Nama:    "Yudistira",
			Julukan: "Dhramasuta",
			Titisan: "Dewa Yama",
		},
		{
			Nama:    "Bima",
			Julukan: "Bayusutha",
			Titisan: "Dewa Bayu",
		},
		{
			Nama:    "Arjuna",
			Julukan: "Partha",
			Titisan: "Dewa Indra",
		},
		{
			Nama:    "Nakula",
			Julukan: "pengasuh kuda",
			Titisan: "Dewa Aswin",
		},
		{
			Nama:    "Sadewa",
			Julukan: "Brihaspati",
			Titisan: "Dewa Aswin",
		},
	}

	pandawas[0].diAngkatRaja()

	jsonBytes, err := json.Marshal(pandawas)
	if err != nil {
		log.Fatalln(err)
	}
	fmt.Println(string(jsonBytes))
}

Kode diatas kita mendefinisikan suatu struct Pandawa, dan membuat array dari struct tersebut, array yang pertama kita ubah status dengan memanggil fungsi diAngkatRaja() lalu setelah itu convert hasilnya menjadi JSON dan terakhir kita cetak dengan STDOUT.

Anda bisa lihat jika dijalankan contoh program tersebut dengan

go run main.go

[{"nama":"Yudistira","nama_julukan":"Dhramasuta","titisan":"Dewa Yama","raja":true},{"nama":"Bima","nama_julukan":"Bayusutha","titisan":"Dewa Bayu","raja":false},{"nama":"Arjuna","nama_julukan":"Partha","titisan":"Dewa Indra","raja":false},{"nama":"Nakula","nama_julukan":"pengasuh kuda","titisan":"Dewa Aswin","raja":false},{"nama":"Sadewa","nama_julukan":"Brihaspati","titisan":"Dewa Aswin","raja":false}]

Melakukan Debug Dengan Breakpoints (tompel merah)

Untuk memulai debug, kita memerlukan beberapa konfigurasi yaitu dengan cara tekan tombol Ikon Debug pada kiri panel Visutl Studio Code, selanjutnya pilih tekan tombol Run and Debug.

menjalankan debugger pada golang

Maka akan terlihat seperti gambar diatas jika kita sudah tekan tombol Run and Debug.

Lanjut kita akan menambahkan suatu breakpoint, karena kita ingin tahu lebih dalam bagaimana cara melakukan debugging di Visual Studio Code.

Tambahkan breakpoint pada baris 20 dengan cara tekan nomor baris yang ada disebelah kiri, maka Anda akan melihat merah.

membuat breakpoint pada vscode

Selanjutnya, tekan F5 atau tekan Run and Debug maka debugger akan menjalankan aplikasi dan berhenti pada titik point yang merah.

menjalankan breakpoint pada vscode

Pada bagian diatas terlihat aplikasi tertahan di breakpoint, sehingga kita bisa melihat beberapa variabel yang sedang berjalan, bahkan ketika kita melakukan pengecekan tiap kode kita bisa melihat berpubahan isi dari tiap variabel yang sudah kita deklarasikan.

Untuk melihat variabel local dan global kita bisa lihat pada panel bagian kiri, sedangkan jika kita ingin melihat log jalannya aplikasi kita bisa lihat kotak merah pada bagian bawah.

Satu hal lagi, akan muncul Debug Toolbar pada bagian atas kiri dekat panel yang digunakan untuk melakukan perjalanan aplikasi, bisa di lanjut, mundur, ataupun jalankan semua proses-nya sampai selesai.

Lanjut, Anda tekan Step Over pada Debug Toolbar, maka akan terlihat aplikasi tertahan di baris ke 49.

menjalankan breakpoint pada vscode

Kita pindah ke panel bagian kiri untuk melihat beberapa variabel yang sedang berjalan pada posisi berhenti ini.

menjalankan breakpoint pada vscode

Kita bisa melihat status dan isi dari suatu variable itu pada waktu tertentu dan kita juga bisa melihat tumpukan proses atau fungsi yang sedang berjalan di fungsi utama.

Saat kita lakukan Step Over lagi sampai melewati baris ke 49, maka salah satu dari Pandawa yaitu Yudistira diangkat menjadi raja.

menjalankan breakpoint pada vscode

Membuat Kondisi pada Breakpoints (tompel merah)

VSCode breakpoints (tompel merah) juga memberikan Anda pilihan untuk memberikan suatu expression biasanya ekspresi ini berupa boolean.

Misalkan, pada baris ke 49, pandawas[0].diAngkatRaja(), kita bisa menambahkan kondisi pada breakpointnya bahwa akan dimunculkan ketika bernilai true, misalkan breakpoint ini bisa berjalan jika pandawas[0].Titisan == "Dewa Angin".

Untuk melakukan itu, kita klik kanan pada breakpoint baris ke 49 lalu pilih Edit Breakpoint...

edit breakpoint pada vscode

Tambahkan kondisi yang akan kita jadikan aturan expression lalu ENTER.

edit breakpoint expression pada vscode

Sekarang kita jalankan debugger tersebut dengan menekan F5, maka debugger tersebut tidak akan stop pada breakpoint tersebut. Aplikasi tetap jalan sampai Anda melihat hasil pada panel debug console dibawahnya.

kebnapa debugger tidak berhenti di breakpoint tersebut? Karena Dari semua pandawas tidak ada yang memiliki Titisan dari Dewa Angin maka debugger tersebut menganggap expression itu FALSE.

Jika Anda ingin aplikasi itu berhenti pada breakpoint tersebut, coba Anda ubah satu pandawas yaitu Yudisthira dengan titisan Dewa Angin, maka debugger akan berhenti di breakpoints tersebut sesuai aturannya. Bisa kan? Selamat mencoba.

Melakukan Debugging pada unit test

Selain kita langsung menjalankan debugging pada main aplikasi, kita juga bisa melakukan debugging pada unit test. Unit test ini biasanya dibuat untuk melakukan pengetesan kode kita agar bisa sesuai dengan reuirement-nya.

Kita coba buat unit test sebuat fungsi aritmatika pertambahan.

func tambah(a, b int) int {
	return a + b
}

Jika Anda menggunakan VSCode ada plugin yang dapat memudahkan untuk membuat unit test dengan melakukan generate saja. Caranya bisa kita lihat dibawah ini.

generate unit test pada vscode

Maka akan terbuat file main_test.go di dalam folder yang sama, maka hasilnya akan seperti dibawah ini.

package main

import "testing"

func Test_tambah(t *testing.T) {
	type args struct {
		a int
		b int
	}
	tests := []struct {
		name string
		args args
		want int
	}{
		{
			name:"pertambahan 1+2",
			args: args{
				a:1,
				b:2,
			},
			want: 3,
		}
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := tambah(tt.args.a, tt.args.b); got != tt.want {
				t.Errorf("tambah() = %v, want %v", got, tt.want)
			}
		})
	}
}

Jika sudah terinstall juga VSCode-Go, Anda juga bisa melihat opsi diatas fungsi unit test.

run test dan debug test pada vscode

Anda tekan run test digunakan untuk menjalan kan test lalu hasilnya akan terlihat langsung di Output window panel bawah dan debug test digunakan untuk menjalan kan unit test tetapi kita juga ingin melakukan brekpoints (berhenti disuatu baris tertentu) untuk melakukan pengecekan. Ini juga bisa dilakukan jika Anda membutuhkan pada saat melakukan debugging pada unit test.

Kesimpulan

Debuggin adalah bagian penting dari pengembangan perangkat lunak dan bagi para programmer terutama jika Anda menggunakan Visual Studio Code sebagai IDE yang dipilih untuk menjalankan coding. VSCode bisa jadi mempermudah Anda untuk mengerjakan pekerjaan karena didukung dengan Debugger tersebut.

Kita telah memberikan penjelasan konsep dasar dari debugging, maka jangan ragu lagi untuk memakainya untuk menunjang pekerjaan Anda. Biasanya untuk mempermudah para programmer golang terbiasa dengan menggunakan fmt.Prinln untuk mendapatkan status atau isi dari variable terkininya. Setelah Anda mengenal debugging ini setidaknya Anda bisa mengurangi penamhahan kode seperti itu kode kita tetap tidak ada perubahan.

Selamat mencoba.

comments powered by Disqus