JavaRush /Java Blog /Random-ID /IntelliJ IDEA dan Debug: bukan menyelam, tapi snorkeling
Viacheslav
Level 3

IntelliJ IDEA dan Debug: bukan menyelam, tapi snorkeling

Dipublikasikan di grup Random-ID
Menulis kode adalah setengah dari perjuangan. Itu masih perlu dibuat agar berfungsi dengan benar. IDE dan alat debugging banyak membantu kami dalam hal ini.
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 1
Dengan menggunakan IntelliJ IDEA sebagai contoh, saya mengusulkan untuk mengetahui bagaimana kita dapat mengetahui apa yang terjadi pada kode kita saat dijalankan. Debug adalah topik yang luas, jadi ulasan ini tidak menawarkan penyelaman yang dalam, seperti penyelam. Tapi saya harap snorkeling pasti)

Perkenalan

Bagian dari penulisan kode adalah men-debugnya. Dan jika tugas Anda menyertakan dukungan kode, akan ada lebih banyak proses debug. Selain itu, dengan bantuan debugging, Anda dapat memeriksa pekerjaan perpustakaan dan kerangka kerja yang digunakan sedalam Anda dapat membenamkan diri dalam hutan kode orang lain. Untuk menyelam, kita membutuhkan: Pertama, buka paket arsip yang diunduh dengan Kode Sumber Mulai Cepat. Luncurkan IntelliJ Idea dan buat “ Proyek Baru dari Sumber yang Ada ”. Pilih file pom.xml di subdirektori hibernate4 . Saat mengimpor, tentukan “ Impor proyek Maven secara otomatis ” dan selesaikan pembuatan proyek, biarkan pengaturan lainnya tidak berubah. Saat proyek sedang diimpor, unzip server aplikasi WildFly yang diunduh ke beberapa direktori. Kami memulai server menggunakan file (atau standalone.sh untuk sistem *nix). (!) Penting untuk memulai dengan parameter --debug Kami menunggu server untuk memulai. Mereka akan menulis kepada kami bahwa itu dimulai dan menunjukkan waktunya. Ini akan terlihat seperti ini: bin\standalone.bat
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 2
Selanjutnya, kita perlu menjalankan proyek yang kita pilih di server. Proses ini dijelaskan dalam dokumentasi kecil yang dapat ditemukan dalam proyek itu sendiri: \hibernate4\README.adoc Seperti yang ditunjukkan dalam dokumentasi ini, kita perlu menjalankan perintah di direktori hibernate4: mvn clean package wildfly:deploy Kami menunggu pesan bahwa pembangunan berhasil diselesaikan:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 3
Setelah ini, di log server kita dapat melihat bagaimana proyek baru “diterapkan”:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 4
Setelah itu kita masuk ke halaman tersebut http://localhost:8080/wildfly-hibernate4dan akan muncul halaman dengan form “ Pendaftaran Anggota ”. Jadi, persiapan eksperimen kita sudah selesai dan kita bisa mulai)) Akan ada banyak gambar di depan untuk kejelasan, jadi bersiaplah)

Debug Jarak Jauh

Jadi, kita perlu mengkonfigurasi mode Debug agar IDE kita mengontrol eksekusi kode di server aplikasi. IntelliJ Idea hadir dalam dua versi: gratis (Komunitas) dan berbayar (Ultimate). Yang terakhir ini dapat dicoba secara resmi dalam bentuk EAP. Di versi Ultimate, semuanya sederhana - server aplikasi dapat diluncurkan langsung dari IDE dalam mode debug. Namun dalam versi Komunitas Anda perlu melakukan beberapa hal secara manual. Oleh karena itu, mari kita pertimbangkan kasus yang lebih rumit, yaitu. pengaturan dalam versi Komunitas. Versi Komunitas memiliki beberapa keterbatasan. Secara khusus, Anda tidak dapat menjalankan server aplikasi darinya. Tetapi Anda dapat mengatur debugging jarak jauh (Remote Debug), ketika di suatu tempat secara terpisah terdapat server yang berjalan dengan aplikasi yang kita butuhkan. Mari gunakan deskripsi pengaturan dari sini: Debug jarak jauh Wildfly di edisi komunitas IntelliJ Idea (menyiapkan Konfigurasi Jalankan Jarak Jauh untuk port 8787). Setelah konfigurasi, kami meluncurkan konfigurasi baru dalam mode Debug:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 5
Jika semuanya baik-baik saja, kita akan melihat pesan tentang ini di bawah:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 6

Proses debug

Mari kita debug menyimpan catatan. Untuk melakukan ini, pertama-tama kita harus memutuskan tempat yang akan kita jelajahi. Dilihat dari jendelanya, kita memerlukan tombol “Daftar”. Mari kita temukan di dalam kode. Jadi, kita memerlukan sebuah elemen, di dalamnya harus ada teks: "Daftar". Atau dia harus ada hubungannya dengan itu. Klik Ctrl+Shift+Fdan cari Daftar dalam tanda kutip. Kami melihat ada satu di index.xhtml.
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 7
Tekan Enter untuk membuka sumber yang ditemukan:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 8
Jadi, kita melihat bahwa ketika mendaftar, memberController.register dipanggil Rupanya, ini pasti semacam kelas Java. Klik Ctrl+Ndan cari:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 9
Memang benar ada kelas seperti itu. Mari kita bahas lebih dalam. Rupanya, harus ada metode mendaftar. Klik Ctrl+F12dan cari cara mendaftarnya
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 10
Memang benar, kami menemukannya. Rupanya, pendaftaran terjadi di sini, di memberRegistration.register . Tekan Ctrl dan klik pada metode untuk “gagal” ke dalamnya:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 11
Sekarang mari kita tentukan “break point” atau Break Point. Ini adalah penanda yang memberitahukan di mana eksekusi kode harus dijeda. Saat ini kita akan mendapat kesempatan untuk mempelajari banyak hal menarik. Untuk memasangnya Anda perlu mengklik di tempat di sebelah kanan nomor baris.
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 12
Pada halaman http://localhost:8080/wildfly-hibernate4 isi kolom dan klik tombol Daftar. Ikon ide di panel akan berkedip:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 13
Masuk ke Idea, Anda dapat melihat ada banyak informasi menarik di panel debug:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 14
Di sini Anda dapat melihat nilai bidang objek. Misalnya, Anggota terdaftar terdiri dari:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 15
Besar. Mau bagaimana lagi? Kita bisa membuka menu konteks dan memilih Evaluate Expression disana (atau melalui menu Run -> Evaluate Expression). Lebih baik lagi, di panel kontrol debugger:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 16
Ini adalah kemampuan yang sangat keren di breakpoint, memiliki akses ke segala sesuatu yang dapat diakses oleh titik kode tersebut, untuk mengeksekusi kode apa pun yang dapat dieksekusi pada saat itu. Misalnya:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 17
Ada juga tombol kontrol pada panel kontrol debugger yang bertanggung jawab ke mana Anda ingin memindahkan kontrol aliran program. Ajaib bukan?) Dengan menekan tombol F8 (Step Out), kita menelusuri kode tanpa memasukkan metode. Dengan menekan F9, kita berhenti menelusuri baris kode dengan debugger, dan memberikan kontrol debugger atas eksekusi program. Jika kita menekan F7 (Step Into), maka kita akan menelusuri kodenya, memasukkan setiap metode yang kita temui di sepanjang jalan. Omong-omong, berikan perhatian khusus pada blok informasi ini:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 18
Ini menunjukkan thread tempat kita berada dan metode pada tumpukan thread saat ini. Tapi bukan itu saja. Untuk kenyamanan, Anda dapat membuka tab bingkai. Untuk melakukan ini, ini harus diaktifkan:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 19
Sekarang pada tab frame kita melihat informasi tentang transisi dari metode ke metode, karena mulai menelusuri kode menggunakan Step Into.
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 20
Seperti yang bisa kita lihat, kita tidak selalu bisa dipindahkan ke tempat program sedang dijalankan. Kami sekarang berada di "getDelegate:469, abstractEntityManager(org.jboss.as.jpa.container)". Tapi faktanya, kami sedang dalam implementasi. Hal ini dibuktikan dengan kelas yang ditentukan oleh ini:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 21
Mari kita lihat ini. Seperti yang kita ketahui, ini menunjuk ke objek saat ini. Kami berada di TransactionScopedEntityManager. Mengapa Idea tidak dapat menunjukkan kodenya kepada kami? Faktanya adalah IntelliJ Idea saat ini tidak mengetahui tentang TransactionScopedEntityManager, karena itu tidak terhubung ke proyek kami (tidak ada dalam ketergantungan proyek). Saat server aplikasi berjalan, ada banyak sekali perpustakaan berbeda yang berjalan di dalamnya. Tapi kita hanya tahu sedikit tentang mereka, karena... secara umum, kita tidak perlu mendalami hal-hal internal, kita hanya memerlukannya agar berfungsi. Namun terkadang minat bekerja atau berolahraga memerlukannya. Kemudian, Anda perlu memberi tahu Idea tentang perpustakaan ini sehingga Idea mengetahui di mana mendapatkan kode kelas.

Menghubungkan perpustakaan pihak ketiga untuk debugging

Pertama, kita sendiri perlu memahami perpustakaan seperti apa yang perlu dihubungkan. Cara pertama , yang paling sulit, adalah mencari di Internet. Kecepatan dan hasil untuk mendapatkan hasil sangat bergantung pada seberapa baik proyek tersebut dikelola. Misalnya, WildFly memiliki repositori terbuka. Jadi ketika kita mencari “TransactionScopedEntityManager” di Google, kita akan membuka https://github.com/wildfly/wildfly/tree/master/jpa/subsystem dan menemukan bahwa kita memerlukan wildfly-jpa. Cara kedua yang benar. Di mana servernya, lihat di sana. Berbagai cara dapat membantu dalam hal ini. Misalnya, di Windows bisa jadi Far Manager . Di bawah ini adalah contoh algoritma pencarian. Setelah menginstal dan meluncurkannya, gunakan Tab untuk beralih ke salah satu tab, menggunakan Alt+F1tab kiri atau Alt+F2kanan, dan pilih partisi yang kita perlukan pada hard drive. Ada kemungkinan bahwa direktori Far Manager itu sendiri terbuka di Far Manager setelah instalasi. Untuk menuju ke root disk, tekan Ctrl + \. Menggunakan, Alt+Fbuka jendela pencarian, mulailah mengetikkan nama direktori dan tekan Enter setelah direktori ditemukan. Pencarian ini cerdas dan menyoroti direktori-direktori yang cocok dengan teks pencarian. Jika Anda memasukkan karakter yang tidak ada foldernya, maka karakter tersebut tidak dapat dimasukkan. Dengan cara ini kita masuk ke direktori server aplikasi. Katakanlah kita tidak tahu di mana letak modul di server. Mungkin ini pertama kalinya dalam hidup Anda mendengar tentang sejenis Lalat Liar. Oleh karena itu, segera klik di sini Alt+F7untuk mencari file. Jadi, logikanya menentukan: kita memerlukan file dengan perpustakaan. Artinya, kita membutuhkan toples. Seharusnya ada kelas TransactionScopedEntityManager di dalamnya. Karena class = file, lalu cari “contains”. Artinya, sesuatu seperti ini:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 22
Sekarang kita tunggu saja hasilnya. Dia tidak akan membuatmu menunggu)
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 23
Sekarang, kita perlu mencari kode sumbernya di suatu tempat. Dan ada 2 pilihan: Mari kita gunakan, mungkin, yang kedua. Mari kita temukan di sana:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 24
Sekarang mari kita beralih ke deskripsi ketergantungan. Di halaman ini Anda dapat mengunduh kode sumbernya. Bagus, sekarang kodenya sudah diunduh. Yang tersisa hanyalah menghubungkan perpustakaan. Ini terhubung dengan sangat sederhana. Kita perlu membuka pengaturan proyek:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 25
Di sana kami memilih "Perpustakaan" dan menambahkan kode sumber yang diterima ke bagian "Sumber", dan di bagian "Kelas" kami menunjukkan file jar perpustakaan itu sendiri dari direktori WildFly, yang kami temukan menggunakan Far Manager. Setelah ini, saat kita menavigasi melalui F7, kita akan melihat konten kelas AbstrakEntityManager dan TransactionScopedEntityManager, dan juga akan tersedia melalui pencarian berdasarkan kelas menggunakan Ctrl+N.

Break Point dengan syarat

Mari kita kembali sekarang ke Break Points. Terkadang, kita tidak selalu ingin berhenti, tapi hanya dalam kondisi tertentu. Apa yang harus dilakukan? Dan di sini IDE kami juga akan membantu kami. Dengan menempatkan Break Point, kita dapat menetapkan kondisi padanya. Misalnya, beri titik dan klik kanan padanya:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 26
Sekarang breakpoint hanya akan aktif jika namanya Maximilian. Dengan mengklik tombol Lainnya, serangkaian pengaturan Break Points yang diperluas akan tersedia untuk Anda.

Break Point pada pengecualian

Terkadang kami mungkin menerima kesalahan dan kami ingin melacak dari mana asalnya. Kemudian kita dapat menambahkan breakpoint bukan pada baris kode tertentu, tetapi pada tempat di mana pengecualian akan dilempar. Untuk melakukan ini, Anda perlu memperluas daftar semua breakpoint:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 27
Dan buat aturan baru untuk jenis pengecualian yang dipilih:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 28
Misalnya untuk NPE:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 29

Kelas HotSwap

Debugger adalah hal yang luar biasa. Selain debugging, ini memungkinkan Anda mengubah kelas! Ya, sumber daya (seperti halaman xhtml, misalnya) tidak dapat diubah dengan mudah. Namun kode kelas java dapat diganti dengan cepat (ini disebut Hot Swap). Untuk melakukan ini, cukup ubah kelas dengan debugger terpasang dan jalankan Run -> Reload Changed Classes. Ulasan bermanfaat tentang topik ini: 4 cara gratis untuk melakukan hot-swap kode di JVM

Kesimpulan

Debugger adalah alat canggih yang memungkinkan pengembang menembus kode yang dieksekusi paling dalam dan mempelajarinya secara detail. Ini memungkinkan Anda memperbaiki kesalahan yang paling membingungkan. Ini juga memungkinkan Anda untuk lebih memahami cara kerja perpustakaan tertentu. Ulasan singkatnya pun ternyata cukup berkesan, namun semoga bermanfaat dan menarik. Jika ada yang tertarik dengan materi ini, Anda dapat melanjutkan penyelaman melalui tautan berikut:
IntelliJ IDEA dan Debug: Bukan menyelam, tapi snorkeling - 30
#Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION