Menyahpepijat dengan Eclipse

1. Gambaran keseluruhan

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

2. Konsep Asas

Eclipse mempunyai sokongan hebat untuk men-debug aplikasi. Ia menggambarkan pelaksanaan langkah demi langkah dan membantu kita menemui bug.

Untuk menunjukkan ciri penyahpepijatan di Eclipse, kami akan menggunakan contoh program PerfectSquareCounter . Program ini mengira jumlah petak sempurna dan kuasa dua sempurna di bawah nombor 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. Mod Debug

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

  • Klik kanan pada editor dan pilih Debug As -> Aplikasi Java (ditunjukkan dalam tangkapan skrin di bawah)
  • Debug program dari bar alat (disorot pada tangkapan skrin di bawah)

2.2. Titik putus

Kita perlu menentukan titik-titik di mana pelaksanaan program harus berhenti untuk penyelidikan. Ini disebut breakpoints dan boleh digunakan untuk kaedah. Mereka juga boleh ditentukan kapan saja sebelum atau semasa pelaksanaan.

Pada asasnya, terdapat 3 cara untuk menambahkan breakpoint ke program:

  • Klik kanan pada bar penanda (pembaris menegak) yang sesuai dengan garis dan pilih Toggle Breakpoint (ditunjukkan pada tangkapan skrin di bawah)
  • Tekan Ctrl + Shift + B pada baris yang diperlukan semasa berada di editor
  • Klik dua kali pada bar penanda (pembaris menegak) yang sesuai dengan garis yang diperlukan

2.3. Kawalan Aliran Kod

Setelah debugger berhenti di titik putus yang ditentukan, kita dapat meneruskan pelaksanaan lebih lanjut.

Mari kita anggap bahawa penyahpepijat kini diletakkan seperti tangkapan skrin di bawah, di Baris 16:

Pilihan debug yang paling biasa digunakan adalah:

  • Langkah Masuk (F5) - Operasi ini sesuai dengan kaedah yang digunakan dalam baris semasa (jika ada); jika tidak, ia terus ke baris seterusnya Dalam contoh ini, ia akan mengambil debugger di dalam kaedahnya adalahPerfectSquare ()
  • Step Over (F6) - Operasi ini memproses garis semasa dan meneruskan ke baris seterusnya. Dalam contoh ini, ini akan melaksanakan kaedah isPerfectSquare () dan meneruskan ke baris seterusnya
  • Step Return (F7) - Operasi ini menyelesaikan kaedah semasa dan membawa kita kembali ke kaedah panggilan. Oleh kerana dalam kes ini, kita mempunyai titik putus, ia masih dalam kaedah, jika tidak, ia akan kembali ke kaedah utama
  • Resume (F8) - Operasi ini hanya akan diteruskan dengan pelaksanaan sehingga program berakhir kecuali kita mendapat titik putus lebih lanjut

2.4. Perspektif Debug

Ketika kita memulakan program dalam mod debug, Eclipse akan meminta dengan pilihan untuk beralih ke perspektif Debug. Perspektif Debug adalah sekumpulan beberapa pandangan berguna yang membantu kami menggambarkan dan berinteraksi dengan penyahpepijat.

Kami juga boleh beralih ke perspektif Debug secara manual pada bila-bila masa.

Berikut adalah beberapa paparan paling berguna yang mengandungi:

  • Paparan debug - Ini menunjukkan jejak dan jejak timbunan yang berbeza
  • Paparan pemboleh ubah - Ini menunjukkan nilai pemboleh ubah pada titik tertentu. Sekiranya kita perlu melihat pemboleh ubah statik, kita perlu menyatakannya secara jelas
  • Breakpoints - Ini menunjukkan titik putus dan titik pengawasan yang berbeza (yang akan kita lihat di bawah)
  • Debug Shell - Ini membolehkan kita menulis dan menilai kod tersuai semasa melakukan debug (contohnya akan dilampirkan kemudian)

3. Teknik

Pada bahagian ini, kita akan melalui beberapa teknik penting yang akan membantu kita menguasai debugging di Eclipse.

3.1. Pemboleh ubah

Kita dapat melihat nilai pemboleh ubah semasa pelaksanaan di bawah paparan Pemboleh ubah. Untuk melihat pemboleh ubah statik, kita dapat memilih pilihan drop-down Java -> Show Variabel Statik .

Menggunakan pandangan pemboleh ubah, adalah mungkin untuk mengubah nilai apa pun ke nilai yang diinginkan semasa pelaksanaan.

Sebagai contoh, jika kita perlu melangkau beberapa nombor dan memulakan secara langsung dengan nombor 80, kita dapat melakukannya dengan mengubah nilai nombor pemboleh ubah :

3.2. Memeriksa Nilai

Sekiranya kita perlu memeriksa nilai ungkapan atau pernyataan Java, kita dapat memilih ekspresi tertentu di editor, klik kanan, dan Periksa, seperti yang ditunjukkan di bawah. Jalan pintas yang berguna adalah menekan Ctrl + Shift + I pada ungkapan 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

Akhirnya, jika aplikasi berjalan di luar Eclipse, kita masih dapat menggunakan semua fungsi di atas, dengan syarat aplikasi jarak jauh memungkinkan penyahpepijatan. Dari Eclipse, kita akan memilih Debug sebagai Aplikasi Java Jauh .

4. Kesimpulan

Dalam panduan ringkas ini, kami telah melihat asas dan teknik berbeza program debugging di Eclipse IDE.

Seperti biasa, kod sumber yang digunakan dalam latihan ini terdapat di GitHub.