JavaRush /Blog Jawa /Random-JV /IntelliJ IDEA lan Debug: ora nyilem, nanging snorkeling
Viacheslav
tingkat

IntelliJ IDEA lan Debug: ora nyilem, nanging snorkeling

Diterbitake ing grup
Nulis kode iku setengah perang. Iku isih kudu digawe kanggo bisa bener. IDE lan alat debugging mbantu kita akeh babagan iki.
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 1
Nggunakake IntelliJ IDEA minangka conto, Aku propose kanggo njaluk kenalan karo carane kita bisa mangerteni apa mengkono kanggo kode nalika mbukak. Debug minangka topik sing wiyar, mula review iki ora menehi nyilem jero, kaya penyelam. Nanging aku ngarep-arep snorkeling mesthi)

Pambuka

Bagéyan saka nulis kode yaiku debugging. Lan yen tugas sampeyan kalebu dhukungan kode, bakal ana luwih akeh debugging. Kajaba iku, kanthi bantuan debugging, sampeyan bisa mriksa karya perpustakaan lan kerangka sing digunakake kanthi jero kaya sampeyan bisa nyemplungake dhewe ing alas kode wong liya. Kanggo nyilem kita kudu: Pisanan, unpack arsip sing diundhuh nganggo Kode Sumber Mulai Cepet. Bukak IntelliJ Idea lan gawe " Proyek Anyar saka Sumber sing Ana ". Pilih file pom.xml ing subdirektori hibernate4 . Nalika ngimpor, temtokake " Impor proyek Maven kanthi otomatis " lan ngrampungake nggawe proyek kasebut, supaya setelan liyane ora diganti. Nalika proyek diimpor, unzip server aplikasi WildFly sing diundhuh menyang sawetara direktori. Kita miwiti server nggunakake file (utawa standalone.sh kanggo *nix sistem). (!) Penting kanggo miwiti karo parameter --debug Kita ngenteni server diwiwiti. Dheweke bakal nulis kanggo kita yen diwiwiti lan nuduhake wektu. Bakal katon kaya iki: bin\standalone.bat
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 2
Sabanjure, kita kudu mbukak proyek sing wis dipilih ing server. Proses iki diterangake ing dokumentasi cilik sing bisa ditemokake ing proyek kasebut dhewe: \hibernate4\README.adoc Kaya sing dituduhake ing dokumentasi iki, kita kudu nglakokake perintah kasebut ing direktori hibernate4: mvn clean package wildfly:deploy Kita ngenteni pesen yen mbangun wis rampung kanthi sukses:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 3
Sawise iki, ing log server kita bisa ndeleng kepiye proyek anyar wis "dipasang":
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 4
Sawise iku, kita pindhah menyang kaca kasebut http://localhost:8080/wildfly-hibernate4lan kita kudu nampilake kaca kanthi formulir " Pendaftaran Anggota ". Dadi, persiapan kanggo eksperimen wis rampung lan kita bisa miwiti)) Bakal ana akeh gambar ing ngarep supaya luwih jelas, mula siyap)

Remote Debug

Dadi, kita kudu ngatur mode Debug supaya IDE kita ngontrol eksekusi kode ing server aplikasi. IntelliJ Idea kasedhiya ing rong versi: gratis (Komunitas) lan mbayar (Ultimate). Sing terakhir bisa dicoba kanthi resmi ing wangun EAP. Ing versi Ultimate, kabeh gampang - server aplikasi bisa diluncurake langsung saka IDE ing mode debug. Nanging ing versi Komunitas sampeyan kudu nindakake sawetara perkara kanthi manual. Mulane, ayo nimbang kasus sing luwih rumit, yaiku. setelan ing versi Komunitas. Versi Komunitas duwe sawetara watesan. Utamane, sampeyan ora bisa mbukak server aplikasi saka iku. Nanging sampeyan bisa nyiyapake debugging remot (Remote Debug), nalika nang endi wae kapisah ana server mlaku karo aplikasi kita kudu. Ayo nggunakake gambaran saka persiyapan saka kene: Remote debug Wildfly ing IntelliJ Idea komunitas edition (nyiyapake Remote Run Konfigurasi kanggo port 8787). Sawise konfigurasi, kita miwiti konfigurasi anyar ing mode Debug:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 5
Yen kabeh apik, kita bakal weruh pesen ing ngisor iki:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 6

Proses debug

Ayo debug nyimpen rekaman. Kanggo nindakake iki, kita kudu nemtokake panggonan sing bakal dijelajahi. Kang menehi kritik dening jendhela, kita kudu tombol "Register". Ayo goleki ing kode. Dadi, kita butuh unsur, mesthine duwe teks: "Register". Utawa dheweke kudu duwe soko apa karo. Klik Ctrl+Shift+Flan goleki Register ing kuotasi. We ndeleng sing ana siji ing index.xhtml.
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 7
Pencet Enter kanggo pindhah menyang sumber sing ditemokake:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 8
Dadi, kita weruh yen ndhaptar, memberController.register diarani. Ketoke, iki kudu sawetara jinis kelas java. Klik Ctrl+Nlan goleki:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 9
Pancen, ana kelas sing kaya ngono. Ayo dadi pindhah menyang. Ketoke, kudu ana cara registrasi. Klik Ctrl+F12lan goleki cara ndhaptar
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 10
Pancen, kita nemokake. Ketoke, registrasi ana ing kene, ing memberRegistration.register . Pencet Ctrl lan klik ing cara kanggo "tumindak" menyang:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 11
Ayo saiki nyetel "break point" utawa Break Point. Iki minangka panandha sing ngandhani ngendi eksekusi kode kudu ngaso. Ing wayahe iki kita bakal duwe kesempatan kanggo sinau akeh bab menarik. Kanggo sijine iku, sampeyan kudu klik ing panggonan ing sisih tengen nomer baris.
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 12
Ing kaca http://localhost:8080/wildfly-hibernate4 isi kolom lan klik tombol Register. Ikon ide ing panel bakal kedhip:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 13
Menyang Idea, sampeyan bisa ndeleng manawa ana akeh informasi sing menarik ing panel debug:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 14
Ing kene sampeyan bisa ndeleng nilai kolom obyek. Contone, apa anggota sing kadhaptar kalebu:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 15
Agung. Apa maneh sing bisa kita lakoni? Kita bisa mbukak menu konteks banjur pilih Evaluate Expression ana (utawa liwat menu Run -> Evaluate Expression). Luwih apik, ing panel kontrol debugger:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 16
Iki minangka kemampuan sing apik banget ing breakpoint, duwe akses menyang kabeh sing bisa diakses dening titik kode kasebut, kanggo nglakokake kode apa wae sing bisa dieksekusi ing titik kasebut. Tuladhane:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 17
Ana uga tombol kontrol ing panel kontrol debugger sing tanggung jawab kanggo ngendi sampeyan pengin mindhah kontrol aliran program. Apa ora sihir?) Kanthi menet tombol F8 (Step Out), kita ngliwati kode kasebut tanpa ngetik metode. Kanthi menet F9, kita mandheg lumaku liwat baris kode karo debugger, lan menehi kontrol debugger liwat eksekusi program. Yen kita menet F7 (Step Into), banjur kita bakal mbukak kode, ngetik saben cara sing kita ketemu ing dalan. Miturut cara, mbayar manungsa waé khusus kanggo blok informasi iki:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 18
Iki nuduhake thread kita lan cara ing tumpukan saka thread saiki. Nanging ora mung kuwi. Kanggo penak, sampeyan bisa mbukak tab pigura. Kanggo nindakake iki, kudu diaktifake:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 19
Saiki ing tab pigura kita ndeleng informasi babagan transisi saka metode menyang metode, amarga miwiti lumaku liwat kode nggunakake Step Into.
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 20
Kaya sing kita deleng, kita ora bisa tansah ditransfer menyang ngendi program saiki lagi dieksekusi. Saiki kita ana ing "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)". Nanging nyatane, kita ing implementasine. Iki dibuktekake dening kelas sing ditemtokake dening iki:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 21
Ayo ndeleng iki. Kaya sing kita ngerteni, iki nuduhake obyek sing saiki. Kita ana ing TransactionScopedEntityManager. Apa ora bisa Idea nuduhake kita kode? Kasunyatane yaiku IntelliJ Idea saiki ora ngerti babagan TransactionScopedEntityManager, amarga ora disambungake menyang proyek kita (ora ana ing dependensi proyek). Nalika server aplikasi mlaku, ana akeh perpustakaan beda sing mlaku ing njero. Nanging kita ngerti sethithik banget babagan dheweke, amarga ... umume, kita ora perlu kanggo delve menyang internals, kita mung kudu bisa. Nanging kadhangkala karya utawa kapentingan olahraga mbutuhake. Banjur, sampeyan kudu ngandhani Idea babagan perpustakaan iki supaya ngerti ngendi entuk kode kelas.

Nyambungake perpustakaan pihak katelu kanggo debugging

Kaping pisanan, awake dhewe kudu ngerti apa jenis perpustakaan sing kudu disambungake. Cara pisanan sing paling angel - telusuran ing Internet. Kacepetan lan asil nemokake asil gumantung banget marang carane proyek kasebut dikelola. Contone, WildFly duwe repositori sing mbukak. Dadi nalika Google "TransactionScopedEntityManager" kita bakal pindhah menyang https://github.com/wildfly/wildfly/tree/master/jpa/subsystem lan nemokake yen kita butuh wildfly-jpa. Cara kapindho bener. Where server punika, katon ana. Macem-macem cara bisa mbantu iki. Contone, ing Windows bisa uga Far Manager . Ing ngisor iki minangka conto algoritma telusuran. Sawise diinstal lan diluncurake, gunakake Tab kanggo ngalih menyang salah sawijining tab, nggunakake Alt+F1tab kiwa utawa Alt+F2sisih tengen, lan pilih partisi sing dibutuhake ing hard drive. Bisa uga direktori Far Manager dhewe mbukak ing Far Manager sawise instalasi. Kanggo pindhah menyang ROOT disk, penet Ctrl + \. Nggunakake, Alt+Fbukak jendhela telusuran, wiwiti ngetik jeneng direktori banjur pencet Ketik sawise direktori ditemokake. Panelusuran iki pinter lan nyorot direktori sing cocog karo teks telusuran. Yen sampeyan ngetik karakter sing ora ana folder, karakter kasebut ora bisa dilebokake. Kanthi cara iki kita pindhah menyang direktori server aplikasi. Ayo dadi ngomong kita ora ngerti ngendi modul dumunung ing server. Bisa uga iki pisanan ing urip sampeyan krungu babagan sawetara jinis WildFly. Mula, langsung klik ing kene Alt+F7kanggo nggoleki file. Dadi, logika ndhikte: kita butuh file karo perpustakaan. Sing, kita kudu jar. Mesthi ana kelas TransactionScopedEntityManager ing njero. Amarga class = file, banjur goleki "ngandhut". Yaiku, kaya mangkene:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 22
Saiki, ayo ngenteni asile. Dheweke ora bakal ngenteni sampeyan)
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 23
Saiki, kita kudu nemokake kode sumber ing endi wae. Lan ana 2 pilihan: Ayo nggunakake, mbok menawa, sing kapindho. Ayo goleki ana:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 24
Saiki ayo nerusake kanggo njlèntrèhaké dependensi. Ing kaca iki sampeyan bisa ngundhuh kode sumber. Apik, saiki kita wis ngundhuh kode kasebut. Sing isih ana yaiku nyambungake perpustakaan. Iku nyambung banget prasaja. Kita kudu mbukak setelan proyek:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 25
Ing kana kita pilih "Perpustakaan" lan nambah kode sumber sing ditampa menyang bagean "Sumber", lan ing bagean "Kelas" kita nuduhake file jar perpustakaan dhewe saka direktori WildFly, sing ditemokake nggunakake Far Manager. Sawise iki, nalika kita navigasi liwat F7, kita bakal weruh isi kelas AbstractEntityManager lan TransactionScopedEntityManager, lan uga kasedhiya liwat telusuran miturut kelas nggunakake Ctrl + N.

Break Points karo kahanan

Ayo bali saiki menyang Break Points. Kadhangkala, kita ora tansah pengin mandheg, nanging mung ing sawetara kondisi. Apa sing kudu ditindakake? Lan ing kene IDE kita uga bakal nulungi kita. Kanthi nempatake Break Point, kita bisa nemtokake kondisi kasebut. Contone, sijine titik lan klik-tengen ing:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 26
Saiki breakpoint mung bakal murub nalika jeneng Maximilian. Kanthi ngeklik tombol Liyane, setelan sing ditambahi kanggo Break Points bakal kasedhiya kanggo sampeyan.

Break Points ing pangecualian

Kadhangkala kita bisa nampa kesalahan lan kita pengin nglacak saka ngendi asale. Banjur kita bisa nambah breakpoint ora ing baris tartamtu saka kode, nanging ing panggonan kang istiméwa bakal di buwang. Kanggo nindakake iki, sampeyan kudu nggedhekake dhaptar kabeh breakpoints:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 27
Lan gawe aturan anyar kanggo jinis pangecualian sing dipilih:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 28
Contone, kanggo NPE:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 29

Kelas HotSwap

Debugger minangka perkara sing apik tenan. Saliyane debugging, ngidini sampeyan ngganti kelas! Ya, sumber daya (kayata kaca xhtml, contone) ora bisa diganti kanthi gampang. Nanging kode kelas java bisa diganti kanthi cepet (iki diarani Hot Swap). Kanggo nindakake iki, mung ngganti kelas karo debugger ditempelake lan nglakokaké Run -> Reload Changed Classes. Tinjauan migunani babagan topik iki: 4 cara gratis kanggo kode hot-swap ing JVM

Kesimpulan

Debugger minangka alat sing kuat sing ngidini pangembang bisa nembus menyang paling jero kode eksekusi lan sinau kanthi rinci. Iki ngidini sampeyan mbenerake kesalahan sing paling mbingungake. Iki uga ngidini sampeyan luwih ngerti cara kerja perpustakaan tartamtu. Malah review ringkes kasebut dadi cukup nyengsemake, nanging muga-muga bisa migunani lan menarik. Yen ana sing kasengsem ing materi iki, sampeyan bisa nerusake nyilem nggunakake pranala ing ngisor iki:
IntelliJ IDEA lan Debug: Ora nyilem, nanging snorkeling - 30
#Viacheslav
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION