Penyahpepijatan Jauh dengan IntelliJ IDEA

1. Pengenalan

Penyahpepijatan jarak jauh memberi kemampuan kepada pembangun untuk mendiagnosis pepijat unik pada pelayan atau proses lain. Ini menyediakan kaedah untuk melacak bug runtime yang menjengkelkan dan mengenal pasti hambatan prestasi dan penurunan sumber.

Dalam tutorial ini, kita akan melihat debug jauh menggunakan JetBrains IntelliJ IDEA. Mari sediakan aplikasi sampel kami terlebih dahulu dengan mengubah JVM.

2. Konfigurasikan JVM

Kami akan menggunakan aplikasi contoh penjadual Musim Semi untuk menyambung dan menambah titik putus dengan mudah ke tugas yang dijadualkan dengan mudah.

Selanjutnya, IntelliJ IDEA menyediakan parameter JVM kami sebagai sebahagian daripada konfigurasi :

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005

2.1. Parameter JVM

Selain konfigurasi Java Debug Wire Protocol (JDWP) - jdwp = transport = dt_socket - kita melihat parameter server , suspend , dan address .

The server parameter mengkonfigurasi JVM sebagai sasaran untuk penyahpepijat kami. The menggantung parameter menceritakan JVM menunggu untuk pelanggan penyahpepijat untuk menyambung sebelum permulaan. Akhirnya, parameter alamat menggunakan hos wildcard dan port yang diisytiharkan.

Oleh itu, mari kita bina aplikasi penjadual:

mvn clean package

Dan sekarang mari kita mulakan aplikasi, termasuk parameter -agentlib: jdwp :

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \ target/gs-scheduling-tasks-0.1.0.jar

Buka mana-mana terminal dan jalankan perintah. Dengan aplikasi kami dimulakan, mari kita beralih ke IntelliJ.

3. Jalankan Konfigurasi di IntelliJ IDEA

Seterusnya, di IntelliJ, kami membuat Run Configuration baru untuk penyahpepijatan jauh:

Sekarang aplikasi kita sedang berjalan, mari kita mulakan sesi debug jauh dengan mengklik butang Debug .

4. Penyahpepijatan Jauh

Seterusnya, kami membuka fail ScheduleTask dan meletakkan breakpoint pada baris 36 yang ditunjukkan di sini:

public void reportCurrentTime() { log.info("The time is now {}", dateFormat.format(new Date())); }

Oleh kerana tugas tersebut dilaksanakan setiap lima saat, tugas tersebut akan berhenti sebaik sahaja ditambahkan. Hasilnya, kita sekarang dapat meneliti keseluruhan aplikasi.

Untuk masalah permulaan aplikasi, kami menukar bendera penangguhan menjadi n dan meletakkan titik putus dalam kaedah utama Aplikasi.

4.1. Batasan

Kadang-kadang pembalakan dan output membingungkan kita ketika melakukan penyahpepijatan jauh. Log tidak akan dihantar ke konsol IDE, jadi fail log luaran dapat digunakan dan dipetakan ke IDE untuk kemampuan debugging yang lebih kuat.

Ingat juga bahawa walaupun penyahpepijatan jauh adalah alat yang sangat kuat, persekitaran pengeluaran bukanlah sasaran yang sesuai untuk melakukan penyahpepijatan .

5. Kesimpulan

Seperti yang kita bahas dalam artikel ini, debug jarak jauh dengan IntelliJ mudah disiapkan dan digunakan dalam beberapa langkah pendek.

Kami melihat cara mengkonfigurasi JVM aplikasi kami untuk debug serta beberapa batasan alat penting ini di kotak alat pembangun kami.

Aplikasi sampel boleh didapati di GitHub.