Debugging dengan Eclipse

1. Ikhtisar

Dalam panduan singkat ini, kita akan melihat cara men-debug program Java menggunakan Eclipse IDE.

2. Konsep Dasar

Eclipse memiliki dukungan yang bagus untuk men-debug aplikasi. Ini memvisualisasikan eksekusi langkah demi langkah dan membantu kami menemukan bug.

Untuk mendemonstrasikan fitur debugging di Eclipse, kita akan menggunakan program contoh PerfectSquareCounter . Program ini menghitung total kuadrat sempurna dan bahkan kuadrat sempurna di bawah angka tertentu:

public class PerfectSquareCounter { static int evenPerfectSquareNumbers = 0; public static void main(String[] args) { int i = 100; System.out.println("Total Perfect Squares: " + calculateCount(i)); System.out.println("Even Perfect Squares : " + evenPerfectSquareNumbers); } public static int calculateCount(int i) { int perfectSquaresCount = 0; for (int number = 1; number <= i; number++) { if (isPerfectSquare(number)) { perfectSquaresCount++; if (number % 2 == 0) { evenPerfectSquareNumbers++; } } } return perfectSquaresCount; } private static boolean isPerfectSquare(int number) { double sqrt = Math.sqrt(number); return sqrt - Math.floor(sqrt) == 0; } }

2.1. Mode Debug

Pertama, kita perlu memulai program Java dalam Eclipse dalam mode debug. Ini dapat dicapai dengan dua cara:

  • Klik kanan pada editor dan pilih Debug As -> Aplikasi Java (ditunjukkan pada gambar di bawah)
  • Debug program dari toolbar (disorot di screenshot di bawah)

2.2. Breakpoints

Kami perlu menentukan titik-titik di mana eksekusi program harus berhenti untuk penyelidikan. Ini disebut breakpoint dan berlaku untuk metode. Mereka juga dapat ditentukan kapan saja sebelum atau selama eksekusi.

Pada dasarnya, ada 3 cara untuk menambahkan breakpoint ke program:

  • Klik kanan pada marker bar (penggaris vertikal) yang sesuai dengan garis dan pilih Toggle Breakpoint (ditunjukkan pada gambar di bawah)
  • Tekan Ctrl + Shift + B pada baris yang diperlukan saat berada di editor
  • Klik dua kali pada bilah penanda (penggaris vertikal) yang sesuai dengan garis yang diperlukan

2.3. Kontrol Aliran Kode

Sekarang debugger berhenti pada breakpoint yang diberikan, kita dapat melanjutkan dengan eksekusi lebih lanjut.

Mari kita asumsikan bahwa debugger saat ini diposisikan seperti gambar di bawah ini, di Baris 16:

Opsi debug yang paling umum digunakan adalah:

  • Step Into (F5) - Operasi ini masuk ke dalam metode yang digunakan di baris saat ini (jika ada); jika tidak, ia melanjutkan ke baris berikutnya. Dalam contoh ini, ini akan mengambil debugger di dalam metode isPerfectSquare ()
  • Step Over (F6) - Operasi ini memproses baris saat ini dan melanjutkan ke baris berikutnya. Dalam contoh ini, ini akan menjalankan metode isPerfectSquare () dan melanjutkan ke baris berikutnya
  • Step Return (F7) - Operasi ini menyelesaikan metode saat ini dan membawa kita kembali ke metode pemanggilan. Karena dalam kasus ini, kami memiliki breakpoint di loop, itu akan tetap di dalam metode, jika tidak, itu akan kembali ke metode utama
  • Resume (F8) - Operasi ini hanya akan melanjutkan eksekusi sampai program berakhir kecuali kita mencapai breakpoint lebih lanjut

2.4. Perspektif Debug

Saat kita memulai program dalam mode debug, Eclipse akan meminta opsi untuk beralih ke perspektif Debug. Perspektif Debug adalah kumpulan beberapa tampilan berguna yang membantu kita memvisualisasikan dan berinteraksi dengan debugger.

Kami juga dapat beralih ke perspektif Debug secara manual kapan saja.

Berikut adalah beberapa tampilan paling berguna yang berisi:

  • Tampilan debug - Ini menunjukkan utas berbeda dan jejak tumpukan panggilan
  • Variables view - Ini menunjukkan nilai variabel pada titik tertentu. Jika kita perlu melihat variabel statis, kita perlu menentukannya secara eksplisit
  • Breakpoints - Ini menunjukkan breakpoint dan watchpoint yang berbeda (yang akan kita lihat di bawah)
  • Debug Shell - Ini memungkinkan kita untuk menulis dan mengevaluasi kode kustom saat debugging (contoh akan dibahas nanti)

3. Teknik

Di bagian ini, kita akan membahas beberapa teknik penting yang akan membantu kita menguasai debugging di Eclipse.

3.1. Variabel

Kita dapat melihat nilai variabel selama eksekusi di bawah tampilan Variables. Untuk melihat variabel statis, kita dapat memilih opsi drop-down Java -> Tampilkan Variabel Statis .

Menggunakan tampilan variabel, Anda dapat mengubah nilai apa pun ke nilai yang diinginkan selama eksekusi.

Sebagai contoh, jika kita perlu melewatkan beberapa angka dan langsung mulai dengan jumlah 80, kita bisa melakukan itu dengan mengubah nilai dari variabel jumlah :

3.2. Memeriksa Nilai

Jika kita perlu memeriksa nilai ekspresi atau pernyataan Java, kita dapat memilih ekspresi tertentu di editor, klik kanan, dan Inspect, seperti yang ditunjukkan di bawah ini. Pintasan praktis adalah dengan menekan Ctrl + Shift + I pada ekspresi untuk melihat nilainya:

In case we need to permanently inspect this expression, we can right-click and Watch. Now, this gets added to the Expressions view and the value of this expression can be seen for different runs.

3.3. Debug Shell

In the context of the debugging session, we can write and run custom code to evaluate possibilities. This is done in the Debug Shell.

For example, if we need to cross-check the correctness of the sqrt functionality, we could do it in the Debug Shell. On the code, Right-click -> Inspect to see the value:

3.4. Conditional Breakpoints

There will be cases in which we want to debug only for specific conditions. We can achieve this by adding conditions to a breakpoint in one of two ways:

  • Right-click on the breakpoint and choose Breakpoint Properties
  • In Breakpoint view, select the breakpoint and specify the condition

For example, we can specify the breakpoint to suspend the execution only if number is equal to 10:

3.5. Watchpoints

Whatbreakpoints are for methods, watchpoints are for class-level variables. In this current example, the breakpoint on evenPerfectSquareNumbers declaration is called a watchpoint. Now, the debugger will pause the execution every time the field is accessed or modified on a watchpoint.

This is the default behavior, which can be changed in the watchpoint's properties.

In this example, the debugger will stop execution every time a perfect square is an even number:

3.6. Trigger Points

Let's assume that we're debugging a complex issue in an application with a huge amount of source code. The debugger will keep suspending the flow due to scattered breakpoints.

When a breakpoint is marked as a trigger point, it means that the rest of the breakpoints will be enabled only if this breakpoint is hit.

For example, in the screenshot below, the breakpoint on isPerfectSquare() is supposed to be hit for every iteration in the loop. However, we've specified the breakpoint on calculateCount() method as a trigger point, along with a condition.

So, when the iteration count reaches 10, this will trigger the rest of the breakpoints. Hence, from now on, if the breakpoint on isPerfectSquare() is hit, the execution will get suspended:

3.7. Remote Debugging

Terakhir, jika aplikasi berjalan di luar Eclipse, kita masih dapat menggunakan semua fungsi di atas, asalkan aplikasi jarak jauh memungkinkan debugging. Dari Eclipse, kami akan memilih Debug sebagai Aplikasi Java Jarak Jauh .

4. Kesimpulan

Dalam panduan singkat ini, kita telah melihat dasar-dasar dan berbagai teknik program debug di Eclipse IDE.

Seperti biasa, kode sumber yang digunakan dalam latihan ini tersedia di GitHub.