Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
CHAPTER #5 DEBUGGING AND EXCEPTION HANDLING Tidak ada orang yang menulis program secara sempurna. Seringkali kita berurusan dengan hal yang membuat suatu kode program tidak dapat berjalan dengan baik, hal ini biasanya sering disebut dengan bug. Pada saat awal belajar bahasa pemrograman, seringkali banyak kesalahan yang dibuat, dan dengan berjalannya waktu kita semakin menguasai bahasa tersebut dengan baik. Dan kemunculan bug akan semakin sedikit, tetapi ini tidak akan pernah hilang. Materi dalam chapter ini tidak akan dapat mengajarkan bagaimana melakukan debugging untuk setiap error yang dapat terjadi, karena debugging adalah suatu skill dan art. Tetapi akan mengajarkan kemampuan dasar yang diperlukan untuk melacak dan memperbaiki bug yang ada didalam code yang dibuat.
5.1. Debugging Debugging sebetulnya sudah sering kita lakukan, ketika kita membuat suatu program kemudian kita jalankan dengan menekan tombol F5 ataupun mengklik icon play di Visual Studio, sebetulnya kita telah menjalankan apa yang disebut dengan debugging. Karena setting default pada F5 adalah melakukan running dengan debugging. Kesalahan dalam pemrograman secara umum dapat dibagi menjadi 3 yaitu compile error, runtime error dan logical error. Compile error adalah kesalahan dalam syntaks program, hal ini akan menyebabkan program tidak akan bisa dicompile. Runtime error adalah kesalahan yang terjadi pada saat program dijalankan. Contohnya apabila program menginginkan masukan berupa angka, tetapi yang dimasukkan oleh user adalah karakter yang bukan angka. Logical error adalah kesalahan dalam pelakukan pengecekan kondisi untuk percabangan ataupun looping sehingga program tidak menghasilkan keluaran seperti yang diharapkan. Adapun cara yang dilakukan untuk mengurangi terjadinya kesalahan dalam pemrograman akan dijelaskan satu per satu.
5.1.1. Shortcut Key untuk debugging Beberapa shortcut key yang dipakai untuk menjalankan debugging. Shortcut key yang biasa dipakai adalh tombol F5. Tombol-tombol lain dapat dilihat dari tabel 5.1 Tabel 5.1. Tabel shortcut key
Shortcut key
Keterangan
F5
Memulai debugging
F11
Step into debugging
F10
Step over debugging
Shift + F11
Step out debugging
Shift + F5
Stop debugging
5.1.2. Perhatikan tampilan pada Editor dan tampilan pada Error List Saat kita menuliskan code program, secara otomatis, Visual Studio editor akan mulai melakukan pemeriksaan terhadap code yang dituliskan. Apabila kode tersebut memiliki kekurangan didalam syntaks, maka Visual Studio Editor akan memberikan tanda garis bawah dengan warna merah kalau code tersebut memiliki kesalahan. Dan pada tampilan di Error List akan disebutkan kesalahan yang terjadi. Dari gambar 5.1. pada baris perintah string kata diberi tanda garis merah pada akhir baris, dan pada jendela error list diberikan keterangan ; expected. Hal ini berarti perintah string kata pada akhir baris kurang tanda titik koma(;). Dengan memperhatikan
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
1
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
tampilan pada jendela editor dan error list maka kesalahan akibat kesalahan syntaks dapat diketahui bahkan sebelum program dicompile.
Gambar 5.1. Syntaks Error dan tampilan Error List
5.1.3. Beri komentar pada bagian yang diperlukan Pemberian komentar pada kode program dapat membantu kita untuk menelusuri jalannya suatu program. Komentar yang susah dimengerti sama saja halnya dengan tidak memberikan komentar sama sekali. Dengan adanya komentar yang mudah dimengerti akan memudahkan melacak algoritma yang dipakai di dalam program. Komentar dapat diberikan pada awal method yang memberikan keterangan tentang apa yang dilakukan oleh suatu method. Komentar juga dapat diletakkan setelah deklarasi suatu variabel yang menerangkan kegunaan dari variabel.
Gambar 5.2. Penggunaan komentar
5.1.4. Setting breakpoints Debugging pada Visual Studio dapat dilakukan dengan berbeapa cara yaitu 1. Default Debugging Debugging yang biasa dijalankan, debugging model ini hanya akan berhenti pada saat terjadi suatu kesalahan. 2. Step into Debugging yang berhenti pada perintah pertama dari suatu method ketika method tersebut dipanggil, dengan demikian kita dapat mengamati apa yang terjadi saat suatu fungsi dipanggil. Untuk melanjutkan pilih menu continue dari pilihan menu di bawah menu debug. 3. Step over Debugging yang akan berhenti setelah perintah dari suatu method yang dipanggil, dengan demikian akan diamati keadaan/kondisi attribute setelah suatu method
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
2
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
dipanggil. Untuk melanjutkan pilih menu continue dari pilihan menu di bawah menu debug. 4. Step out Debugging yang akan berhenti pada statement berikutnya. Apabila breakpoints berada pada suatu method, maka debugging akan berhenti setelah method tersebut dijalankan dan nilai pengembalian telah diberikan. 5. Breakpoints Debugging akan berhenti pada titik yang kita tentukan, titik ini disebut dengan breakpoint. Cara membuat break point adalah menekan tombol kiri mouse pada bagian pinggir kiri di Visual Studio Editor. Untuk lebih jelas lihat gambar 5.3.
Gambar 5.3. Setting breakpoint Dengan memberikan suatu breakpoint, kita dapat mengetahui apa yang terjadi pada suatu titik dalam pemrograman.
5.1.5. Watching variable Sewaktu melakukan debugging, kita dapat melihat isi dari variabel yag diamati pada saat breakpoint. Pada gambar 5.4, dapat dilihat isi dari variabel angka dan variabel perulangan i.
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
3
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
Gambar 5.4. Local variabel
5.1.5. Using Immediate Window Pada jendela immediate kita dapat menjalankan suatu perintah atau menampilkan suatu variabel. Perintah untuk menampilkan adalah print atau dapat juga dengan menggunakan simbol ?. Pada gambar 5.5 digunakan ? i untuk melihat isi dari variabel i.
Gambar 5.5. Menggunakan Immediate window
5.2. Exception Handling Exception Handling adalah suatu cara yang dapat digunakan untuk mengatasi terjadinya runtime error. Seperti halnya namanya, runtime error adalah error yang terjadi saat suatu program dijalankan(runtime). Runtime error biasanya terjadi karena seorang user memberikan masukan diluar apa yang diharapkan oleh programmer. Ketika programmer mengharapkan user mengetikkan suatu angka, bisa saja user mencoba untuk memasukkan karakter selain angka. Atau ketika pembagian dibagi dengan bilangan 0.
Gambar 5.6. Runtime error
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
4
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
Gambar 5.7. Tampilan error ketika program dijalankan secara langsung.
Gambar 5.8 Pilihan Just in time debugger
5.2.1. Menggunakan try catch block Runtime error dapat diatasi dengan menggunakan try catch block. Lihat program dibawah ini namespace ConsoleApplication4{ class Program { static void Main(string[] args) { int x =10, y = 0, z; try { z = x / y; } catch (DivideByZeroException except) { Console.WriteLine("Exception " + except.StackTrace); } Console.ReadKey(); } } }
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
5
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
Apabila program ConsoleApplication4 dijalankan, maka pada layar tampilan akan muncul informasi error apa yang terjadi.
Gambar 5.9. Tampilan pada layar command prompt
Gambar 5.10 Tampilan bila program dijalankan dari Visual Studio Editor Aliran diagram dalam menangani exception dapat dilihat dari gambar 5.11.
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
6
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
Gambar 5.11. Urutan penanganan exception Selain itu dapat juga menampilkan pesan yang ditulis sendiri. Beberapa bentuk dari try catch block, yaitu : 1. Bentuk try block diikuti dengan satu atau lebih catch block // try..catch
try { } catch(Exception e) { }
2. bentuk try block diikuti dengan finally block // try..finally try { } finally{ }
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
7
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
3. Bentuk try block diikuti dengan satu atau lebih catch block dan terakhir ditutup dengan dfinally block // try..catch..finally try { } catch(Exception e) { } finally{ } // try..catches..finally try { } catch(Exception e) { } catch { } finally{ }
Block try adalah suatu bagian dari program yang diamati yang akan diproteksi, dimana ada kemungkinan terjadinya suatu exception. Format dari try adalah try { protected} Block try harus diikuti dengan block catch ataupun block finally. Blok catch adalah block yang menangkap exception yang terjadi didalam blok try. Blok catch juga dapat dibuat secara bertingkat seperti catch1(filter1) { handler1}... catchn(filter n) { handler n} Blok finally adalah blok program yang akan dijalankan baik ada exception atau tidak terjadi exception. Blok ini biasanya merupakan bagian yang menutup suatu method, ketika suatu exception terjadi, maka perintah yang ada setelah exception terjadi tidak dijalankan, sementara itu bagian tersebut adalah kode untuk menutup suatu method, katakan bagian dari suatu destructor misalnya file.close(). Karena itu code yang digunakan untuk menutup suatu method diletakkan pada bagian finally. Jadi baik terjadi suatu exception atau tidak, maka method untuk menutup selalu ada dan akan dijalankan, sehingga tidak akan terjadi penumpukan resource yang tidak terpakai.
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
8
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
5.2.2. Exception Class Exception Class memiliki hierarchi seperti berikut:
Gambar 5.12. Exception Hierarchi Exception class adalah class exception yang paling tinggi, dan memiliki dua class turunan yaitu SystemException dan ApplicationException. SystemException adalah class exception yang dihasilkan oleh CLR dan .Net Framework, sedangkan ApplicationException adalah exception yang didefinisikan oleh aplikasi.
5.2.2.1. System.Exception Class System.Exception Class memiliki empat buah constructor yaitu: 1.public Exception() 2.public Exception(string message) 3.public Exception(string message, Exception innerException) 4.protected Exception(Serialization info, StreamingContext context) public Exception() adalah constructor default, public Exception(string message) adalah constructor dengan parameter string yang berupa pesan yang dapat diatur, public Exception(string message, Exception innerException) adalah constructor dimana dapat diatur pesan yang ditampilkan dan juga mengatur innerException, dan constructor terakhir adalah constructor yang dibangkitkan secara remote. Method yang ada pada System.Exception dapat dilihat pada tabel 5.2 Tabel 5.2. Method System.Exception Nama Method
Keterangan
GetBaseException Mengembalikan exception root dari rangkaian exception. GetObjectData
Mengembalikan rangkaian data dari exception.
GetType
Mengembalikan type dari exception.
ToString
Mengubah pesan yang dikembalikan menjadi bentuk String.
Attribute pada System.Exception adalah sebagai berikut Tabel 5.3. Attribute pada System.Exception Properties
Keterangan
Tipe
Data
Mengembalikan koleksi dictionary menyediakan detail dari exception.
HelpLink
Link ke help file untuk exception.
string
Read/Write
HResult
32 bit error code, protected properties.
int
Read/Write
InnerException Merepresentasikan exception sebelumnya.
Exception
Read
Message
Pean yang mendeskripsikan exception.
string
Read
Source
Nama aplikasi/object exception.
StackTrace
String yang merepresentasikan call stack saat string exception terjadi.
TargetSite
Reference exception.
ke
method
yang
dimana
yang IDictionary
Read/Write
memicu string
Read
Read/Write Read
terjadi MethodBase Read
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
9
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
Beberapa contoh System.Exception 1.FormatException 2.OverflowException 3.DivideByZeroException 4.ArithmeticException 5.FileNotFoundException 6.IOException
5.2.2.2. ApplicationException Class ApplicationException Class adalah class exception yang dibuat sendiri oleh programmers. Merupakan exception yang dipanggil oleh aplikasi dan bukan oleh CLR. Biasanya diturunkan dari System.Exception atau dari class Exception. Langkah langkah untuk membuat class exception sendiri adalah sebagai berikut: 1.beri nama pada class exception yang akan dibuat, pada akhir nama sebaiknya diberi akhiran Exception. 2.Turunkan dari class Exception atau System.Exception. 3.Definisikan constructors yang menginisialisasikan kondisi dari exception aplikasi. Dalam hal ini termasuk juga anggota yang didapat dari warisan base class. 4.Dalam aplikasi exception, dapat ditambahkan attribute yang dapat memperhalus System.Exception yang terjadi untuk kasus khusus dari exception yang terjadi. Untuk memanggil aplikasi exception gunakan perintah throw. Dapat juga menggunakan throw untuk System.Exception. Throw exception dapat dianggap sebagai software exception. CLR akan menganggap software exception sama seperti exception yang standar. Syntaks untuk throw exception adalah: throw exceptioninstance; atau bisa juga throw; Untuk throw hanya dapat dilakukan pada blok catch saja. Kebijakan terbaik adalah menambahkan keterangan pada exception sebelumnya melemparkan kembali object exception. Aplikasi exception biasanya dipanggil oleh kejadian yang exceptional. Dala suatu aplikasi, kejadian yang exceptional adalah kejadian sperti berikut ini : constructor gagal untuk menginisialisasi kondisi dari object. Property tidak lolos dalam validasi. Parameter null. Exceptional value yang dikembalikan dari suatu method. UnhandledException adalah exception yang tidak ditangani dalam kode program, exception ini ditangani secara global. Exception yang terjadi akan melaporkan dalam suatu error dialog box yang akan memberikan saran untuk melakukan debug, send error report dan don't send tombol (lihat gambar 5.7). Untuk aplikasi yang berada dalam lingkup debugger, maka unhandled exception akan ditangani oleh debugger. Daur hidup dari exception dapat dilihat dalam gambar 5.13. Sebaiknya dalam merancang suatu aplikasi jangan membiarkan semua kemungkinan yang ada yang dapat memicu exception tidak ditangani. Desain aplikasi yang baik akan berusaha menangkap kejadian yang memicu exception dengan penanganan exception yang terstruktur. Hanya untuk kemungkinan yang tidak diperkirakan sajalah kejadian tersebut boleh ditangani oleh UnhandledException.
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
10
Modul IT210 Pemrograman Visual Fakultas Teknologi Informasi – Universitas Kristen Satya Wacana
Gambar 5.13. Daur hidup dari Exception.
Jasson Presttiliano, ST; Dian W. Chandra, S.Kom; Yos Richard Beeh, ST;
11