JavaRush /Blog Java /Random-MS /IntelliJ IDEA dan Debug: bukan menyelam, tetapi snorkelin...

IntelliJ IDEA dan Debug: bukan menyelam, tetapi snorkeling

Diterbitkan dalam kumpulan
Menulis kod adalah separuh daripada pertempuran. Ia masih perlu dibuat untuk berfungsi dengan betul. IDE dan alat penyahpepijatan banyak membantu kami dalam hal ini.
IntelliJ IDEA dan Debug: Bukan menyelam, tetapi snorkeling - 1
Menggunakan IntelliJ IDEA sebagai contoh, saya mencadangkan untuk membiasakan diri dengan cara kita boleh mengetahui perkara yang berlaku kepada kod kita apabila ia dijalankan. Nyahpepijat ialah topik yang luas, jadi ulasan ini tidak menawarkan menyelam dalam, seperti penyelam. Tetapi saya harap snorkeling pasti)

pengenalan

Sebahagian daripada menulis kod sedang menyahpepijatnya. Dan jika tugas anda termasuk sokongan kod, akan terdapat lebih banyak penyahpepijatan. Selain itu, dengan bantuan penyahpepijatan, anda boleh memeriksa kerja perpustakaan dan rangka kerja yang digunakan sedalam-dalamnya kerana anda boleh menyelami hutan kod orang lain. Untuk menyelam kami memerlukan: Mula-mula, buka pek arkib yang dimuat turun dengan Kod Sumber Mula Pantas. Lancarkan IntelliJ Idea dan cipta " Projek Baharu daripada Sumber Sedia Ada ". Pilih fail pom.xml dalam subdirektori hibernate4 . Apabila mengimport, nyatakan " Import projek Maven secara automatik " dan selesaikan penciptaan projek, biarkan tetapan lain tidak berubah. Semasa projek sedang diimport, nyahzip pelayan aplikasi WildFly yang dimuat turun ke dalam beberapa direktori. Kami memulakan pelayan menggunakan fail (atau standalone.sh untuk sistem *nix). (!) Adalah penting untuk bermula dengan parameter --debug . Kami menunggu pelayan bermula. Mereka akan menulis kepada kami bahawa ia bermula dan menunjukkan masa. Ia akan kelihatan seperti ini: bin\standalone.bat
IntelliJ IDEA dan Debug: Bukan menyelam, tetapi snorkeling - 2
Seterusnya, kita perlu menjalankan projek yang telah kita pilih pada pelayan. Proses ini diterangkan dalam dokumentasi kecil yang boleh didapati dalam projek itu sendiri: \hibernate4\README.adoc Seperti yang ditunjukkan dalam dokumentasi ini, kita perlu menjalankan arahan dalam direktori hibernate4: mvn clean package wildfly:deploy Kami sedang menunggu mesej bahawa binaan telah berjaya disiapkan:
IntelliJ IDEA dan Debug: Bukan menyelam, tetapi snorkeling - 3
Selepas ini, dalam log pelayan kita dapat melihat bagaimana projek baharu itu telah "dikerahkan":
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 4
Selepas itu, kami pergi ke halaman http://localhost:8080/wildfly-hibernate4dan kami harus memaparkan halaman dengan borang " Pendaftaran Ahli ". Jadi, persediaan kami untuk eksperimen selesai dan kami boleh mulakan)) Akan ada banyak gambar di hadapan untuk kejelasan, jadi bersiaplah)

Nyahpepijat Jauh

Jadi, kami perlu mengkonfigurasi mod Nyahpepijat supaya IDE kami mengawal pelaksanaan kod pada pelayan aplikasi. IntelliJ Idea datang dalam dua versi: percuma (Komuniti) dan berbayar (Multimate). Yang terakhir boleh dicuba secara rasmi dalam bentuk EAP. Dalam versi Ultimate, semuanya mudah - pelayan aplikasi boleh dilancarkan terus dari IDE dalam mod nyahpepijat. Tetapi dalam versi Komuniti anda perlu melakukan beberapa perkara secara manual. Oleh itu, mari kita pertimbangkan kes yang lebih rumit, i.e. tetapan dalam versi Komuniti. Versi Komuniti mempunyai beberapa had. Khususnya, anda tidak boleh menjalankan pelayan aplikasi daripadanya. Tetapi anda boleh menyediakan penyahpepijatan jauh (Remote Debug), apabila di suatu tempat secara berasingan terdapat pelayan yang sedang berjalan dengan aplikasi yang kami perlukan. Mari gunakan perihalan persediaan dari sini: Nyahpepijat jauh Wildfly dalam edisi komuniti IntelliJ Idea (menyediakan Konfigurasi Larian Jauh untuk port 8787). Selepas konfigurasi, kami melancarkan konfigurasi baharu kami dalam mod Nyahpepijat:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 5
Jika semuanya baik-baik saja, kita akan melihat mesej tentang perkara ini di bawah:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 6

Proses nyahpepijat

Mari nyahpepijat menyimpan rekod. Untuk melakukan ini, kita mesti terlebih dahulu memutuskan tempat di mana kita akan meneroka. Berdasarkan tetingkap, kami memerlukan butang "Daftar". Mari cari dalam kod. Jadi, kita memerlukan elemen, ia sepatutnya mempunyai teks: "Daftar". Atau dia sepatutnya ada kaitan dengannya. Klik Ctrl+Shift+Fdan cari Daftar dalam petikan. Kami melihat bahawa terdapat satu pada index.xhtml.
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 7
Tekan Enter untuk pergi ke sumber yang ditemui:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 8
Jadi, kita melihat bahawa apabila mendaftar, memberController.register dipanggil. Rupa-rupanya, ini mesti sejenis kelas java. Klik Ctrl+Ndan cari:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 9
Memang ada kelas sebegitu. Mari kita masuk ke dalamnya. Nampaknya, perlu ada kaedah daftar. Klik Ctrl+F12dan cari kaedah daftar
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 10
Memang kami jumpa. Nampaknya, pendaftaran berlaku di sini, dalam memberRegistration.register . Tekan Ctrl dan klik pada kaedah untuk "jatuh" ke dalamnya:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 11
Sekarang mari kita tetapkan "titik putus" atau Titik Putus. Ini ialah penanda yang memberitahu tempat pelaksanaan kod harus dijeda. Pada masa ini kita akan berpeluang mempelajari banyak perkara menarik. Untuk meletakkannya anda perlu klik di tempat di sebelah kanan nombor baris.
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 12
Pada halaman http://localhost:8080/wildfly-hibernate4 isikan medan dan klik butang Daftar. Ikon idea pada panel akan berkelip:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 13
Pergi ke Idea, anda boleh melihat bahawa terdapat banyak maklumat menarik dalam panel nyahpepijat:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 14
Di sini anda boleh melihat nilai medan objek. Sebagai contoh, ahli berdaftar terdiri daripada apa:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 15
Hebat. Apa lagi yang boleh kita lakukan? Kita boleh membuka menu konteks dan pilih Evaluate Expression di sana (atau melalui menu Run -> Evaluate Expression). Lebih baik lagi, pada panel kawalan penyahpepijat:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 16
Ini adalah kebolehan yang hebat pada titik putus, mempunyai akses kepada semua yang boleh diakses oleh titik kod itu, untuk melaksanakan sebarang kod yang boleh dilaksanakan pada ketika itu. Sebagai contoh:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 17
Terdapat juga butang kawalan pada panel kawalan penyahpepijat yang bertanggungjawab ke mana anda ingin mengalihkan kawalan aliran program. Bukankah itu ajaib?) Dengan menekan butang F8 (Langkah Keluar), kami berjalan melalui kod tanpa memasukkan kaedah. Dengan menekan F9, kami berhenti berjalan melalui baris kod dengan penyahpepijat, dan memberikan kawalan penyahpepijat ke atas kemajuan program. Jika kita menekan F7 (Step Into), maka kita akan melalui kod tersebut, memasukkan setiap kaedah yang kita temui di sepanjang jalan. Dengan cara ini, beri perhatian khusus kepada blok maklumat ini:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 18
Ini menunjukkan benang yang kita sertai dan kaedah pada susunan benang semasa. Tetapi bukan itu sahaja. Untuk kemudahan, anda boleh membuka tab bingkai. Untuk melakukan ini ia mesti didayakan:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 19
Sekarang pada tab bingkai kita melihat maklumat tentang peralihan daripada kaedah ke kaedah, kerana mula berjalan melalui kod menggunakan Step Into.
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 20
Seperti yang kita lihat, kita tidak boleh sentiasa dipindahkan ke tempat program sedang dilaksanakan. Kami kini berada di "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)". Tetapi sebenarnya, kita dalam pelaksanaan. Ini dibuktikan oleh kelas yang ditentukan oleh ini:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 21
Mari kita lihat ini. Seperti yang kita tahu, ia menunjuk kepada objek semasa. Kami berada di TransactionScopedEntityManager. Mengapa Idea tidak dapat menunjukkan kod tersebut kepada kami? Hakikatnya ialah IntelliJ Idea pada masa ini tidak tahu tentang mana-mana TransactionScopedEntityManager, kerana ia tidak disambungkan kepada projek kami (ia bukan dalam kebergantungan projek). Apabila pelayan aplikasi sedang berjalan, terdapat banyak, banyak perpustakaan yang berbeza berjalan di dalamnya. Tetapi kita tahu sedikit tentang mereka, kerana... secara amnya, kita tidak perlu mendalami dalaman, kita hanya memerlukannya untuk berfungsi. Tetapi kadangkala minat kerja atau sukan memerlukannya. Kemudian, anda perlu memaklumkan Idea tentang perpustakaan ini supaya ia tahu di mana untuk mendapatkan kod kelas.

Menyambungkan perpustakaan pihak ketiga untuk penyahpepijatan

Pertama, kita sendiri perlu memahami jenis perpustakaan yang perlu disambungkan. Cara pertama adalah yang paling sukar - cari di Internet. Kepantasan dan hasil mencari keputusan sangat bergantung pada sejauh mana projek itu diuruskan. Sebagai contoh, WildFly mempunyai repositori terbuka. Jadi apabila kami Google "TransactionScopedEntityManager" kami akan pergi ke https://github.com/wildfly/wildfly/tree/master/jpa/subsystem dan mendapati bahawa kami memerlukan wildfly-jpa. Kaedah kedua adalah betul. Di mana pelayan berada, lihat di sana. Pelbagai cara boleh membantu dengan ini. Sebagai contoh, pada Windows ia boleh menjadi Pengurus Jauh . Di bawah ialah contoh algoritma carian. Setelah memasang dan melancarkannya, gunakan Tab untuk beralih ke salah satu tab, menggunakan Alt+F1tab kiri atau Alt+F2kanan, dan pilih partition yang kami perlukan pada cakera keras. Ada kemungkinan bahawa direktori Pengurus Jauh itu sendiri dibuka dalam Pengurus Jauh selepas pemasangan. Untuk pergi ke akar cakera, tekan Ctrl + \. Menggunakan, Alt+Fbuka tetingkap carian, mula menaip nama direktori dan tekan Enter selepas direktori ditemui. Carian ini bijak dan menyerlahkan direktori yang sepadan dengan teks carian. Jika anda memasukkan aksara yang tiada folder, maka aksara tersebut tidak boleh dimasukkan. Dengan cara ini kita pergi ke direktori pelayan aplikasi. Katakan kita tidak tahu di mana modul terletak pada pelayan. Mungkin ini kali pertama dalam hidup anda mendengar tentang sejenis WildFly. Oleh itu, klik segera di sini Alt+F7untuk mencari fail. Jadi, logik menentukan: kita memerlukan fail dengan perpustakaan. Iaitu, kita memerlukan balang. Perlu ada kelas TransactionScopedEntityManager di dalamnya. Kerana class = fail, kemudian cari "mengandungi". Iaitu, sesuatu seperti ini:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 22
Sekarang, mari kita tunggu hasilnya. Dia tidak akan membuat anda menunggu)
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 23
Sekarang, kita perlu mencari kod sumber untuknya di suatu tempat. Dan ada 2 pilihan: Mari kita gunakan, mungkin, yang kedua. Jom cari di sana:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 24
Sekarang mari kita teruskan untuk menerangkan pergantungan. Pada halaman ini anda boleh memuat turun kod sumber. Bagus, kini kami telah memuat turun kod. Yang tinggal hanyalah menyambungkan perpustakaan. Ia menghubungkan dengan sangat mudah. Kita perlu membuka tetapan projek:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 25
Di sana kami memilih "Perpustakaan" dan menambah kod sumber yang diterima ke bahagian "Sumber", dan dalam bahagian "Kelas" kami menunjukkan fail balang perpustakaan itu sendiri daripada direktori WildFly, yang kami dapati menggunakan Pengurus Jauh. Selepas ini, apabila kita menavigasi melalui F7, kita akan melihat kandungan kelas AbstractEntityManager dan TransactionScopedEntityManager, dan juga akan tersedia melalui carian mengikut kelas menggunakan Ctrl+N.

Mata Pecah dengan syarat

Mari kembali sekarang ke Mata Pecah. Kadang-kadang, kita tidak selalu mahu berhenti, tetapi hanya dalam beberapa syarat. Apa nak buat? Dan di sini IDE kami juga akan membantu kami. Dengan meletakkan Titik Putus, kita boleh menetapkan syarat kepadanya. Sebagai contoh, letakkan titik dan klik kanan padanya:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
Sekarang titik putus hanya akan menyala apabila namanya Maximilian. Dengan mengklik butang Lagi, set tetapan yang diperluaskan untuk Mata Pecah akan tersedia untuk anda.

Mata Pecah pada pengecualian

Kadangkala kami mungkin menerima ralat dan kami ingin mengesan dari mana ia datang. Kemudian kita boleh menambah titik putus bukan pada baris kod tertentu, tetapi di tempat pengecualian akan dilemparkan. Untuk melakukan ini, anda perlu mengembangkan senarai semua titik putus:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
Dan buat peraturan baharu untuk jenis pengecualian yang dipilih:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
Sebagai contoh, untuk NPE:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

Kelas HotSwap

Penyahpepijat adalah perkara yang menakjubkan. Selain nyahpepijat, ia membolehkan anda menukar kelas! Ya, sumber (seperti halaman xhtml, contohnya) tidak boleh diubah dengan begitu mudah. Tetapi kod kelas java boleh diganti dengan cepat (ini dipanggil Hot Swap). Untuk melakukan ini, cuma tukar kelas dengan penyahpepijat dilampirkan dan laksanakan Run -> Reload Changed Classes. Ulasan berguna tentang topik ini: 4 cara percuma untuk kod hot-swap pada JVM

Kesimpulan

Penyahpepijat ialah alat berkuasa yang membolehkan pembangun menembusi ke dalam kod pelaksana dan mengkajinya dalam setiap perincian. Ini membolehkan anda membetulkan ralat yang paling mengelirukan. Ia juga membolehkan anda memahami dengan lebih baik cara perpustakaan tertentu berfungsi. Walaupun ulasan ringkas seperti itu ternyata agak mengagumkan, tetapi saya harap ia akan berguna dan menarik. Jika ada yang berminat dengan bahan ini, anda boleh teruskan menyelam menggunakan pautan berikut:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#Viacheslav
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION