JavaRush /Java blogi /Random-UZ /IntelliJ IDEA va Debug: sho'ng'in emas, balki snorkeling
Viacheslav
Daraja

IntelliJ IDEA va Debug: sho'ng'in emas, balki snorkeling

Guruhda nashr etilgan
Kod yozish - bu urushning yarmi. To'g'ri ishlashi uchun uni hali ham qilish kerak. IDE va ​​disk raskadrovka vositalari bu borada bizga ko'p yordam beradi.
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 1
Misol sifatida IntelliJ IDEA dan foydalanib, men kodimiz ishga tushganda unga nima bo'lishini qanday aniqlashimiz mumkinligi bilan tanishishni taklif qilaman. Nosozliklarni tuzatish keng mavzu, shuning uchun bu sharh sho'ng'in kabi chuqur sho'ng'ishni taklif qilmaydi. Lekin umid qilamanki, shnorkeling)

Kirish

Kodni yozishning bir qismi uni tuzatishdir. Va agar sizning vazifalaringiz kodni qo'llab-quvvatlashni o'z ichiga olsa, disk raskadrovka yanada ko'proq bo'ladi. Bundan tashqari, disk raskadrovka yordamida siz boshqa birovning kodining o'rmoniga sho'ng'ishingiz mumkin bo'lgan kutubxonalar va ishlatiladigan ramkalar ishini chuqur o'rganishingiz mumkin. Bizning sho'ng'in uchun bizga kerak bo'ladi: Birinchidan, yuklab olingan arxivni Quick Start Source Code yordamida oching. IntelliJ Idea-ni ishga tushiring va " Mavjud manbalardan yangi loyiha " ni yarating. hibernate4 pastki katalogida pom.xml faylini tanlang . Import qilishda " Maven loyihalarini avtomatik ravishda import qilish " ni belgilang va boshqa sozlamalarni o'zgartirmasdan loyihani yaratishni yakunlang. Loyiha import qilinayotganda, yuklab olingan WildFly ilova serverini ba'zi katalogga oching. Biz serverni fayl bin\standalone.bat(yoki *nix tizimlari uchun standalone.sh) yordamida ishga tushiramiz. (!) --debug parametridan boshlash muhim.Biz server ishga tushishini kutamiz. Ular bizga u boshlanganini yozadilar va vaqtni ko'rsatadilar. Bu shunday ko'rinadi:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 2
Keyinchalik, biz tanlagan loyihani serverda ishga tushirishimiz kerak. Ushbu jarayon loyihaning o'zida topilishi mumkin bo'lgan kichik hujjatlarda tasvirlangan: \hibernate4\README.adoc Ushbu hujjatda ko'rsatilganidek, biz hibernate4 katalogida buyruqni ishga tushirishimiz kerak: mvn clean package wildfly:deploy Qurilish muvaffaqiyatli yakunlanganligi haqidagi xabarni kutmoqdamiz:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 3
Shundan so'ng, server jurnalida biz yangi loyiha qanday "joylashtirilganligini" ko'rishimiz mumkin:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 4
Shundan so'ng, biz sahifaga o'tamiz va biz " Ro'yxatdan o'tishhttp://localhost:8080/wildfly-hibernate4 " shakli bilan sahifani ko'rsatishimiz kerak . Shunday qilib, tajribalarga tayyorgarligimiz tugallandi va biz boshlashimiz mumkin)) Aniqlik uchun oldinda juda ko'p rasmlar bo'ladi, shuning uchun tayyorlaning)

Masofaviy disk raskadrovka

Shunday qilib, biz Debug rejimini sozlashimiz kerak, shunda bizning IDE dastur serverida kodning bajarilishini nazorat qiladi. IntelliJ Idea ikkita versiyada taqdim etiladi: bepul (Hamjamiyat) va pullik (Ultimate). Ikkinchisini EAP shaklida rasmiy ravishda sinab ko'rish mumkin. Ultimate versiyada hamma narsa oddiy - dastur serveri disk raskadrovka rejimida to'g'ridan-to'g'ri IDE dan ishga tushirilishi mumkin. Ammo Hamjamiyat versiyasida siz bir nechta narsalarni qo'lda qilishingiz kerak. Shuning uchun, keling, yanada murakkab ishni ko'rib chiqaylik, ya'ni. hamjamiyat versiyasida sozlash. Hamjamiyat versiyasida ba'zi cheklovlar mavjud. Xususan, undan dastur serverini ishga tushira olmaysiz. Ammo siz masofaviy disk raskadrovkani (Remote Debug) o'rnatishingiz mumkin, agar alohida joyda bizga kerak bo'lgan dastur bilan ishlaydigan server mavjud bo'lsa. Keling, bu yerdan sozlash tavsifidan foydalanamiz: IntelliJ Idea hamjamiyat nashrida Wildfly-ni masofadan disk raskadrovka qilish (8787 port uchun masofaviy ishga tushirish konfiguratsiyasini sozlash). Konfiguratsiyadan so'ng biz yangi konfiguratsiyani Debug rejimida ishga tushiramiz:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 5
Agar hamma narsa yaxshi bo'lsa, biz bu haqda quyidagi xabarni ko'ramiz:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 6

Nosozliklarni tuzatish jarayoni

Yozuvni saqlashda disk raskadrovka qilaylik. Buning uchun, avvalo, biz o'rganadigan joyni hal qilishimiz kerak. Oynaga ko'ra, bizga "Ro'yxatdan o'tish" tugmasi kerak. Keling, uni kodda topamiz. Shunday qilib, bizga element kerak, unda matn bo'lishi kerak: "Ro'yxatdan o'tish". Yoki u bilan qandaydir aloqasi bo'lishi kerak. Bosing Ctrl+Shift+Fva qo'shtirnoq ichida Ro'yxatdan o'tishni qidiring. Biz index.xhtml da borligini ko'ramiz.
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 7
Topilgan manbaga o'tish uchun Enter tugmasini bosing:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 8
Shunday qilib, biz ro'yxatdan o'tishda memberController.register chaqirilganini ko'ramiz.Ko'rinib turibdiki, bu qandaydir java sinfi bo'lishi kerak. Bosing Ctrl+Nva qidiring:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 9
Darhaqiqat, bunday sinf mavjud. Keling, unga kiraylik. Ko'rinishidan, ro'yxatga olish usuli bo'lishi kerak. Bosing Ctrl+F12va ro'yxatdan o'tish usulini qidiring
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 10
Darhaqiqat, biz topdik. Ko'rinishidan, ro'yxatdan o'tish bu erda, memberRegistration.register da sodir bo'ladi . Ctrl tugmasini bosing va unga "tushish" usulini bosing:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 11
Keling, "to'xtash nuqtasi" yoki Break nuqtasini o'rnatamiz. Bu kodning bajarilishi qayerda to'xtatilishi kerakligini ko'rsatadigan marker. Ayni paytda biz juda ko'p qiziqarli narsalarni o'rganish imkoniyatiga ega bo'lamiz. Uni qo'yish uchun siz qator raqamining o'ng tomonidagi joyni bosishingiz kerak.
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 12
http://localhost:8080/wildfly-hibernate4 sahifasida maydonlarni to'ldiring va Ro'yxatdan o'tish tugmasini bosing. Paneldagi g'oya belgisi miltillaydi:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 13
Idea-ga o'tsangiz, disk raskadrovka panelida juda ko'p qiziqarli ma'lumotlar mavjudligini ko'rishingiz mumkin:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 14
Bu yerda siz ob'ekt maydonlarining qiymatini ko'rishingiz mumkin. Masalan, ro'yxatdan o'tgan a'zo nimadan iborat:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, snorkeling - 15
Ajoyib. Yana nima qila olamiz? Biz kontekst menyusini ochishimiz va u erda "Ifodani baholash" ni tanlashimiz mumkin (yoki "Ishga tushirish" -> "Ifodani baholash" menyusi orqali). Yaxshisi, tuzatuvchining boshqaruv panelida:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, snorkeling - 16
Bu to'xtash nuqtasida o'ta ajoyib qobiliyat bo'lib, u kod nuqtasi kirish huquqiga ega bo'lgan hamma narsaga kirish huquqiga ega, shu nuqtada bajarilishi mumkin bo'lgan har qanday kodni bajarish uchun. Masalan:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 17
Shuningdek, disk raskadrovka boshqaruv panelida dastur oqimi boshqaruvini qayerga o'tkazmoqchi bo'lganingiz uchun javobgar bo'lgan boshqaruv tugmalari mavjud. Bu sehr emasmi?) F8 (Step Out) tugmasini bosish orqali biz usullarni kiritmasdan kod bo'ylab yuramiz. F9 tugmachasini bosish orqali biz tuzatuvchi bilan kod satrlari bo'ylab yurishni to'xtatamiz va tuzatuvchiga dasturning bajarilishi ustidan nazoratni beramiz. Agar biz F7 (Step Into) tugmachasini bossak, biz yo'lda uchrashadigan har bir usulni kiritib, kodni o'tkazamiz. Aytgancha, ushbu ma'lumot blokiga alohida e'tibor bering:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 18
Bu biz bo'lgan ipni va joriy ipning stekidagi usullarni ko'rsatadi. Lekin bu hammasi emas. Qulaylik uchun siz ramkalar yorlig'ini ochishingiz mumkin. Buning uchun u yoqilgan bo'lishi kerak:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 19
Endi ramkalar yorlig'ida biz usuldan usulga o'tish haqidagi ma'lumotlarni ko'ramiz, chunki Step Into yordamida kod orqali yurishni boshladi.
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 20
Ko'rib turganimizdek, biz har doim dastur bajarilayotgan joyga o'tkaza olmaymiz. Biz hozir "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" damiz. Lekin, aslida, biz amaldamiz. Buni ko'rsatilgan sinf tasdiqlaydi:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 21
Keling, buni ko'rib chiqaylik. Ma'lumki, u joriy ob'ektga ishora qiladi. Biz TransactionScopedEntityManager xizmatidamiz. Nega Idea bizga kodni ko'rsata olmaydi? Gap shundaki, IntelliJ Idea hozirda hech qanday TransactionScopedEntityManager haqida bilmaydi, chunki u bizning loyihamiz bilan bog'liq emas (u loyiha bog'liqliklarida emas). Ilova serveri ishlayotgan bo'lsa, uning ichida juda ko'p turli xil kutubxonalar ishlaydi. Lekin biz ular haqida juda kam narsa bilamiz, chunki... umuman olganda, biz ichki narsalarni o'rganishimiz shart emas, faqat ishlash uchun kerak. Ammo ba'zida ish yoki sportga bo'lgan qiziqish buni talab qiladi. Keyin Idea-ga ushbu kutubxona haqida xabar berishingiz kerak, shunda u sinf kodini qaerdan olishni biladi.

Nosozliklarni tuzatish uchun uchinchi tomon kutubxonalarini ulash

Birinchidan, biz o'zimiz qanday kutubxonani ulash kerakligini tushunishimiz kerak. Birinchi usul eng qiyin - Internetda qidirish. Natijani topish tezligi va natijasi ko'p jihatdan loyiha qanchalik yaxshi boshqarilganiga bog'liq. Masalan, WildFly-da ochiq ombor mavjud. Shunday qilib, biz “TransactionScopedEntityManager” ni Google qilganimizda https://github.com/wildfly/wildfly/tree/master/jpa/subsystem saytiga o‘tamiz va bizga wildfly-jpa kerakligini topamiz. Ikkinchi usul to'g'ri. Server qayerda, u yerga qarang. Bunga turli xil vositalar yordam berishi mumkin. Masalan, Windows-da bu Far Manager bo'lishi mumkin . Quyida qidiruv algoritmiga misol keltirilgan. Uni o'rnatib, ishga tushirgandan so'ng , chap yoki o'ngdagi yorliqlardan biriga o'tish uchun Tab-dan foydalaning va qattiq diskda bizga kerak bo'lgan bo'limni tanlang. O'rnatishdan keyin Far Manager katalogining o'zi Far Manager-da ochiq bo'lishi mumkin. Diskning ildiziga o'tish uchun ni bosing . Undan foydalanib, qidiruv oynasini oching, katalog nomini yozishni boshlang va katalog topilgandan keyin Enter tugmasini bosing. Ushbu qidiruv aqlli va qidiruv matniga mos keladigan kataloglarni ta'kidlaydi. Agar siz papkalari bo'lmagan belgilarni kiritsangiz, bunday belgilarni kiritib bo'lmaydi. Shu tarzda biz dastur serveri katalogiga o'tamiz. Aytaylik, modullar serverda qayerda joylashganligini bilmaymiz. Ehtimol, bu hayotingizda birinchi marta WildFly haqida eshitayotgandirsiz. Shuning uchun, fayllarni qidirish uchun darhol shu yerni bosing . Shunday qilib, mantiq aytadi: bizga kutubxona bilan fayl kerak. Ya'ni, bizga banka kerak. Ichkarida TransactionScopedEntityManager klassi bo'lishi kerak. Chunki class = fayl, keyin "o'z ichiga oladi" ni qidiring. Ya'ni, shunga o'xshash narsa: Alt+F1Alt+F2Ctrl + \Alt+FAlt+F7
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 22
Endi natijani kutamiz. U sizni kutmaydi)
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, snorkeling - 23
Endi biz uning manba kodini biror joyda topishimiz kerak. Va ikkita variant mavjud: Keling, ikkinchisidan foydalanaylik. Keling, u erda topamiz:
IntelliJ IDEA va Debug: sho'ng'in emas, balki sho'ng'in - 24
Endi qaramlikni tavsiflashga o'tamiz. Ushbu sahifada siz manba kodini yuklab olishingiz mumkin. Ajoyib, endi kod yuklab olindi. Faqat kutubxonani ulash qoladi. U juda sodda tarzda ulanadi. Loyiha sozlamalarini ochishimiz kerak:
IntelliJ IDEA va disk raskadrovka: sho'ng'in emas, balki snorkeling - 25
U erda biz "Kutubxonalar" ni tanlaymiz va olingan manba kodlarini "Manbalar" bo'limiga qo'shamiz va "Sinflar" bo'limida biz Far Manager yordamida topilgan WildFly katalogidan kutubxona jar faylini ko'rsatamiz. Shundan so'ng, biz F7 bo'ylab harakat qilganimizda, biz AbstractEntityManager va TransactionScopedEntityManager sinflarining mazmunini ko'ramiz, shuningdek, Ctrl+N tugmalari yordamida sinflar bo'yicha qidirish orqali ham foydalanish mumkin bo'ladi.

Shartlar bilan tanaffus nuqtalari

Keling, Break Points-ga qaytaylik. Ba'zan, biz har doim to'xtashni xohlamaymiz, lekin faqat ba'zi shartlar ostida. Nima qilsa bo'ladi? Va bu erda bizning IDE ham bizga yordam beradi. Break Pointni qo'yish orqali biz unga shart belgilashimiz mumkin. Masalan, nuqta qo'ying va ustiga sichqonchaning o'ng tugmachasini bosing:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
Endi to'xtash nuqtasi faqat ism Maksimilian bo'lganda yonadi. "Ko'proq" tugmasini bosish orqali siz tanaffus nuqtalari uchun kengaytirilgan sozlamalar to'plamidan foydalana olasiz.

Istisnolar uchun tanaffus nuqtalari

Ba'zan biz xatoga yo'l qo'yishimiz mumkin va biz uning qayerdan kelganini kuzatishni xohlaymiz. Keyin biz to'xtash nuqtasini kodning ma'lum bir qatoriga emas, balki istisno qilinadigan joyga qo'shishimiz mumkin. Buni amalga oshirish uchun siz barcha to'xtash nuqtalari ro'yxatini kengaytirishingiz kerak:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
Tanlangan istisno turi uchun yangi qoida yarating:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
Masalan, NPE uchun:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

HotSwap darslari

Debugger - bu ajoyib narsa. Nosozliklarni tuzatishdan tashqari, u sinflarni o'zgartirishga imkon beradi! Ha, resurslarni (masalan, xhtml sahifalari kabi) osongina o'zgartirib bo'lmaydi. Ammo java sinflarining kodini tezda almashtirish mumkin (bu Hot Swap deb ataladi). Buning uchun faqat tuzatuvchi biriktirilgan sinfni o'zgartiring va Run -> O'zgartirilgan sinflarni qayta yuklashni bajaring. Ushbu mavzu bo'yicha foydali sharh: JVM-da kodni hot-swap qilishning 4 ta bepul usuli

Xulosa

Tuzatish vositasi - bu ishlab chiquvchiga ijro etuvchi kodning chuqurligiga kirib borish va uni har bir tafsilotini o'rganish imkonini beruvchi kuchli vosita. Bu sizga eng chalkash xatolarni tuzatishga imkon beradi. Shuningdek, u ba'zi kutubxonalar qanday ishlashini yaxshiroq tushunishga imkon beradi. Hatto bunday qisqacha sharh juda ta'sirli bo'lib chiqdi, ammo umid qilamanki, bu foydali va qiziqarli bo'ladi. Agar kimdir ushbu materialga qiziqsa, quyidagi havolalar orqali sho'ng'inni davom ettirishingiz mumkin:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION