Autos, Locals, dan Watch

6.7.2 Autos, Locals, dan Watch

Melanjutkan cerita di atas, pada saat eksekusi program dihentikan sementara, VS.Net secara otomatis akan menata ulang tampilannya. Pada saat tersebut, window autos pada bagian kiri bawah layar akan diaktifkan (Gambar 6-3). Perhatikan bahwa variabel x, y, dan hasil ditampilkan beserta nilainya. Jadi pada saat ini kita bisa mengamati situasi dan kondisi program yang nantinya mungkin menyebabkan error.

Pada bagian bawah window autos, ada beberapa tab lain, yaitu locals dan watch. Autos dan locals, jika coba-coba diklik, isinya sama. Window watch sendiri tidak ada isinya. Jadi apa perbedaan antara ketiga window ini?

Perbedaan antara autos, locals, dan watch dirangkum dalam tabel berikut.

Window Keterangan Autos

Diisi secara otomatis oleh VS.Net Isinya adalah variabel-variabel yang digunakan dalam statement yang sedang aktif dan statement sebelumnya

Locals Diisi secara otomatis oleh VS.Net Isinya adalah variabel-variabel lokal

Watch Tidak diisi secara otomatis oleh VS.Net. Kita harus mendaftarkan dulu apa yang hendak ditampilkan. Selain digunakan untuk mengamati variabel, watch bisa digunakan untuk mengamati nilai ekspresi. Contoh: selain utk mengamati nilai variabel x, watch bisa digunakan untuk mengamat nilai x + y

Untuk keperluan debugging masalah kita di atas, window autos sudah cukup memadai. Perhatikan bahwa nilai x=1, y=2, dan hasil=0 (nilai default karena baris sekarang belum dieksekusi). Untuk melengkapi persenjataan kita untuk debugging, kita masih memerlukan satu fitur lagi, yaitu stepping.

6 .7.3 Step Into, Step Over, dan Step Out

Saat ini kita sudah bisa menghentikan program untuk sementara dan mengamati status/isi berbagai variabel. Ada satu lagi fitur penting untuk melakukan debugging, yaitu fitur untuk menjalankan program baris per baris, mulai dari pada saat breakpoint aktif. Dengan fitur ini, kita bisa memastikan baris mana yang menyebabkan terjadinya error.

Ada tiga perintah yang dapat digunakan untuk menjalankan program selangkah demi s elangkah, yaitu Step Into, Step Over, dan Step Out. Untuk memanggil perintah-perintah tersebut, klik menu Debug dan pilih submenu ybs (lihat Gambar 6-4 di bawah). Fungsi perintah-perintah tersebut adalah sbb.

Nama Perintah

Kegunaan

Step Into Digunakan untuk menjalankan baris berikutnya. Bila ada pemanggilan fungsi, maka program akan berhenti lagi pada baris pertama dalam fungsi itu. Jadi step into akan menyebabkan eksekusi program “masuk” ke ke dalam fungsi.

Step O ver Digunakan untuk menjalankan baris berikutnya, seperti halnya step in to. Bedanya, kalo baris berikutnya memuat pemanggilan fungsi, step over akan menjalankan keseluruhan isi fung si. Jadi apapun isi baris tersebut, semuanya akan dijalankan oleh step over sebelum

e ksekusi program di-pause lagi.

Step Out Digunakan untuk keluar dari fungsi yang sedang Step Out Digunakan untuk keluar dari fungsi yang sedang

Gambar 6-4. Su bmenu step into, step ove r, dan step out.

P ada kasus yang sedang kita tangani, baris 15 dan 16 tidak memanggil fungsi lain, jadi menggunakan step into atau step over akan memperoleh hasil yang sama.

Sekarang coba tekan tombol F10 atau klik menu Debug | Step over. Selanjutnya yang akan di-highlight adalah baris 16 (lihat Gambar 6-5 di bawah). Ini berarti baris 15 sudah dijalankan dan variabel hasil seh arusnya sudah memiliki nilai. Perhatikan lagi window

a utos di kiri bawah (masih pada Gambar 6-5).

Ternyata setelah baris 15 di jalankan, nilai variabel hasil masih 0. Dengan demikian pada ti tik ini kita telah mengetahui persis baris mana yang menyebabkan kesalahan. Jika perhitungannya benar, setelah baris 15 dijalankan variabel hasil seharusnya bernilai 0.5.

Gambar 6-5. Setelah step over dijalankan.

Selamat .... Anda sudah selangkah lebih maju dalam investigasi ini. Seringkali banyak waktu terbuang hanya untuk melokalisir masalah. Melokalisir masalah artinya memastikan bagian mana yang menyebabkan terjadinya kesalahan tsb. Jadi jika Anda membuat aplikasi untuk di-maintain sendiri, pastikan bahwa tiap kali terjadi kesalahan, ada cukup informasi yang dicatat (atau ditulis ke layar) sehingga Anda bisa tahu persis bagian mana yang menyebabkan terjadinya kesalahan tsb.

Jadi apa sebenarnya penyebab masalahnya? Kenapa hasil pembagiannya = 0, bukan 0.5? Operator pembagian bisa menerima operand bilangan bulat (misalnya integer) maupun pecahan (misalnya double). Dalam contoh tersebut, x dan y bertipe integer, sehingga operasi pembagian yang dilakukan adalah operasi pembagian bilangan integer, yang artinya bahwa nilai pecahan dari hasil operasinya akan dibuang. Jadi kalau yang dilakukan adalah x bagi y (1 bagi 2), hasilnya adalah 0. Kalau kita menginginkan hasilnya adalah 0.5, maka salah satu operand harus diubah ke double sehingga operasi yang dilakukan tidak lagi operasi pembagian bilangan integer. Contoh:

us i ng Sy s t em;

names pac e c om. got do t net . ot ak {

c l as s Cont ohBr eak poi nt 2 {

publ i c s t at i c v oi d Mai n( ) {

Cons ol e. Wr i t e( " Mas uk k an ni l ai x : " ) ; Cons ol e. Wr i t e( " Mas uk k an ni l ai x : " ) ;

Cons ol e. Wr i t e( " Mas uk k an ni l ai y : " ) ;

i nt y = i nt . Par s e( Cons ol e. ReadLi ne( ) ) ;

doubl e has i l = ( doubl e) x / y ; Cons ol e. Wr i t eLi ne( " Has i l pembagi an x/y =

{ 0} " , has i l ) ; Cons ol e. ReadLi ne( ) ;

Pada Kode 7 di atas , pada bagian double hasil = (double)x/y, variabel x diubah tipenya ke double s ebelum melakukan operasi pembagian. Dengan demikian yang

d ieksekusi adalah operasi pembagian untuk bilangan double.

P erhatikan juga pada contoh sebelumnya (Kode 6), walaupun tipe variabel hasil adalah

d ouble, yang terjadi adalah hasil pembagian tetap bertipe integer (bernilai 0) dan kemudian di-cast ke double (nilainya tetap 0). Jadi tipe variabel penampung hasil akhir operasi tidak berpengaruh dalam hal ini.