JavaRush /Java Blogu /Random-AZ /IntelliJ IDEA və Debug: dalğıc deyil, snorkeling
Viacheslav
Səviyyə

IntelliJ IDEA və Debug: dalğıc deyil, snorkeling

Qrupda dərc edilmişdir
Kod yazmaq döyüşün yarısıdır. Düzgün işləməsi üçün hələ də edilməlidir. IDE-lər və sazlama vasitələri bu işdə bizə çox kömək edir.
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 1
Nümunə olaraq IntelliJ IDEA-dan istifadə edərək kodumuz işlədikdə ona nə baş verdiyini necə öyrənə biləcəyimizlə tanış olmağı təklif edirəm. Debug geniş mövzudur, ona görə də bu baxış dalğıc kimi dərin dalğıc təklif etmir. Amma əminəm ki, snorkeling)

Giriş

Kodun yazılmasının bir hissəsi onu sazlamaqdır. Və tapşırıqlarınıza kod dəstəyi daxildirsə, daha çox sazlama olacaq. Bundan əlavə, sazlamanın köməyi ilə istifadə olunan kitabxanaların və çərçivələrin işini başqasının kodunun cəngəlliyinə qərq edə biləcəyiniz qədər dərindən yoxlaya bilərsiniz. Dalış üçün bizə lazım olacaq: Əvvəlcə yüklənmiş arxivi Quick Start Source Code ilə paketdən çıxarın. IntelliJ Idea-nı işə salın və “ Mövcud Mənbələrdən Yeni Layihə ” yaradın. hibernate4 alt kataloqunda pom.xml faylını seçin . İdxal edərkən “ Maven layihələrini avtomatik olaraq idxal et ”i təyin edin və digər parametrləri dəyişmədən layihənin yaradılmasını tamamlayın. Layihə idxal edilərkən, yüklənmiş WildFly proqram serverini bəzi qovluğa açın. Fayldan bin\standalone.bat(və ya *nix sistemləri üçün standalone.sh) istifadə edərək serveri işə salırıq. (!) --debug parametri ilə başlamaq vacibdir.Biz serverin başlamasını gözləyirik. Bizə yazacaqlar ki, o, ildə başlayıb və vaxtı göstərəcək. Bu kimi bir şey görünəcək:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 2
Daha sonra seçdiyimiz layihəni serverdə işlətməliyik. Bu proses layihənin özündə tapıla bilən kiçik sənədlərdə təsvir edilmişdir: \hibernate4\README.adoc Bu sənədləşmədə göstərildiyi kimi, hibernate4 qovluğunda əmri işə salmalıyıq: mvn clean package wildfly:deploy Quraşdırmanın uğurla başa çatdığına dair bir mesaj gözləyirik:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 3
Bundan sonra, server jurnalında yeni layihənin necə "yerləşdirildiyini" görə bilərik:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 4
Bundan sonra səhifəyə gedirik və “ Üzvün qeydiyyatıhttp://localhost:8080/wildfly-hibernate4 ” forması olan bir səhifə göstərməliyik . Beləliklə, eksperimentlərə hazırlığımız tamamlandı və başlaya bilərik)) Aydınlıq üçün qarşıda çoxlu şəkillər olacaq, hazır olun)

Uzaqdan Sazlama

Beləliklə, Debug rejimini konfiqurasiya etməliyik ki, IDE proqram serverində kodun icrasına nəzarət etsin. IntelliJ Idea iki versiyada təqdim olunur: pulsuz (İcma) və pullu (Ultimate). Sonuncu rəsmi olaraq EAP şəklində sınaqdan keçirilə bilər. Ultimate versiyada hər şey sadədir - proqram serveri IDE-dən birbaşa debug rejimində işə salına bilər. Ancaq İcma versiyasında bir neçə şeyi əl ilə etməlisiniz. Buna görə də, daha mürəkkəb bir işi nəzərdən keçirək, yəni. İcma versiyasında parametr. İcma versiyasında bəzi məhdudiyyətlər var. Xüsusilə, ondan bir proqram serverini işə sala bilməzsiniz. Ancaq ayrı bir yerdə ehtiyac duyduğumuz tətbiq ilə işləyən bir server olduqda, uzaqdan sazlama (Remote Debug) qura bilərsiniz. Quraşdırmanın təsvirindən buradan istifadə edək: IntelliJ Idea icma nəşrində Wildfly-də uzaqdan debug (8787 portu üçün Remote Run Konfiqurasiyasının qurulması). Konfiqurasiyadan sonra yeni konfiqurasiyamızı Debug rejimində işə salırıq:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 5
Hər şey qaydasındadırsa, aşağıda bununla bağlı bir mesaj görəcəyik:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 6

Debug prosesi

Gəlin qeydi saxlayaraq sazlayaq. Bunun üçün ilk öncə tədqiq edəcəyimiz yerə qərar verməliyik. Pəncərəyə görə bizə "Qeydiyyatdan keç" düyməsi lazımdır. Gəlin onu kodda tapaq. Beləliklə, bizə bir element lazımdır, onun mətni olmalıdır: "Qeydiyyatdan keç". Ya da onunla bir əlaqəsi olmalıdır. Klikləyin Ctrl+Shift+Fvə dırnaq içərisində Qeydiyyatı axtarın. index.xhtml üzərində bir olduğunu görürük.
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 7
Tapılmış mənbəyə getmək üçün Enter düyməsini basın:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 8
Beləliklə, görürük ki, qeydiyyatdan keçən zaman memberController.register çağırılır.Görünür , bu, hansısa java sinfi olmalıdır. Klikləyin Ctrl+Nvə axtarın:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 9
Həqiqətən də belə bir sinif var. Gəlin daxil olaq. Görünür, qeydiyyat metodu olmalıdır. Klikləyin Ctrl+F12və qeydiyyat metodunu axtarın
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 10
Doğrudan da, tapdıq. Göründüyü kimi, qeydiyyat burada, memberRegistration.register- də baş verir . Ctrl düyməsini basın və ona "düşmək" üçün metodu vurun:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 11
İndi “qırılma nöqtəsi” və ya qırılma nöqtəsi təyin edək. Bu, kodun icrasının harada dayandırılacağını bildirən bir markerdir. Bu anda bir çox maraqlı şeyləri öyrənmək imkanımız olacaq. Bunu qoymaq üçün sətir nömrəsinin sağındakı yerə klikləmək lazımdır.
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 12
http://localhost:8080/wildfly-hibernate4 səhifəsində sahələri doldurun və Qeydiyyat düyməsini klikləyin. Paneldəki ideya ikonu yanıb-sönəcək:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 13
Idea'ya gedərkən, debug panelində çox maraqlı məlumatların olduğunu görə bilərsiniz:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 14
Burada obyektin sahələrinin dəyərini görə bilərsiniz. Məsələn, qeydiyyatdan keçmiş Üzv nədən ibarətdir:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 15
Əla. Başqa nə edə bilərik? Biz kontekst menyusunu aça və orada İfadəni Qiymətləndirməni seçə bilərik (və ya Run -> Evaluate Expression menyusu vasitəsilə). Daha yaxşısı, sazlayıcı idarəetmə panelində:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 16
Bu, kəsilmə nöqtəsində, həmin nöqtədə icra oluna bilən hər hansı kodu icra etmək üçün həmin kod nöqtəsinin daxil olduğu hər şeyə çıxışı olan super əla qabiliyyətdir. Misal üçün:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 17
Sazlayıcı idarəetmə panelində proqram axını nəzarətini hərəkət etdirmək istədiyiniz yerə cavabdeh olan idarəetmə düymələri də var. Sehrli deyilmi?) F8 (Step Out) düyməsini sıxmaqla metodlar daxil etmədən kodu gəzirik. F9 düyməsini basaraq, biz sazlayıcı ilə kod sətirləri arasında getməyi dayandırırıq və proqramın icrası üzərində sazlayıcıya nəzarəti veririk. F7 (Step Into) düyməsini bassaq, yolda rastlaşdığımız hər bir metodu daxil edərək kodu keçəcəyik. Yeri gəlmişkən, bu məlumat blokuna xüsusi diqqət yetirin:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 18
Bu, daxil olduğumuz mövzunu və cari ipin yığınındakı üsulları göstərir. Ancaq bu hamısı deyil. Rahatlıq üçün çərçivələr sekmesini aça bilərsiniz. Bunu etmək üçün aktivləşdirilməlidir:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 19
İndi çərçivələr sekmesinde metoddan metoda keçid haqqında məlumat görürük, çünki Step Into istifadə edərək kodu gəzməyə başladı.
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 20
Gördüyümüz kimi, biz həmişə proqramın hazırda icra olunduğu yerə köçürülə bilmirik. Biz indi "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" ünvanındayıq. Amma əslində biz icradayıq. Bu, bununla müəyyən edilmiş siniflə sübut olunur:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 21
Gəlin buna baxaq. Bildiyimiz kimi, cari obyektə işarə edir. Biz TransactionScopedEntityManager-dəyik. Niyə Idea bizə kodu göstərə bilmir? Fakt budur ki, IntelliJ Idea hazırda heç bir TransactionScopedEntityManager haqqında bilmir, çünki layihəmizə bağlı deyil (layihə asılılıqlarında deyil). Tətbiq serveri işləyərkən onun daxilində çoxlu sayda müxtəlif kitabxanalar işləyir. Amma biz onlar haqqında çox az şey bilirik, çünki... ümumiyyətlə, bizə daxili şeyləri araşdırmaq lazım deyil, sadəcə işləmək lazımdır. Ancaq bəzən iş və ya idman marağı bunu tələb edir. Sonra Idea-a bu kitabxana haqqında məlumat verməlisiniz ki, o, sinif kodunu haradan əldə edəcəyini bilsin.

Sazlama üçün üçüncü tərəf kitabxanalarının qoşulması

Birincisi, biz özümüz başa düşməliyik ki, hansı kitabxana bağlanmalıdır. Birinci yol ən çətindir - İnternetdə axtarış. Nəticənin tapılmasının sürəti və nəticəsi layihənin nə qədər yaxşı idarə olunmasından çox asılıdır. Məsələn, WildFly-nin açıq deposu var. Beləliklə, biz “TransactionScopedEntityManager” i Google-da etdikdə https://github.com/wildfly/wildfly/tree/master/jpa/subsystem səhifəsinə keçəcəyik və bizə wildfly-jpa lazım olduğunu görəcəyik. İkinci üsul düzgündür. Server haradadır, oraya baxın. Müxtəlif vasitələr bu işdə kömək edə bilər. Məsələn, Windows-da Far Manager ola bilər . Aşağıda bir axtarış alqoritmi nümunəsidir. Quraşdırıb işə saldıqdan sonra sol və ya sağ tabdan istifadə edərək nişanlardan birinə keçmək üçün Tab-dan istifadə edin və sabit diskdə bizə lazım olan bölməni seçin. Quraşdırıldıqdan sonra Far Manager qovluğunun özü Far Manager-də açıq olması olduqca mümkündür. Diskin kökünə getmək üçün düyməsini basın . İstifadə edərək, axtarış pəncərəsini açın, kataloqun adını yazmağa başlayın və kataloq tapıldıqdan sonra Enter düyməsini basın. Bu axtarış ağıllıdır və axtarış mətninə uyğun gələn qovluqları vurğulayır. Qovluq olmayan simvolları daxil etsəniz, belə simvollar daxil edilə bilməz. Bu yolla proqram serverinin kataloquna gedirik. Deyək ki, modulların serverdə harada yerləşdiyini bilmirik. Bəlkə də bu, həyatınızda ilk dəfədir ki, bir növ WildFly haqqında eşidirsiniz. Buna görə də, faylları axtarmaq üçün dərhal bura klikləyin . Beləliklə, məntiq diktə edir: bizə kitabxana ilə bir fayl lazımdır. Yəni bir banka lazımdır. İçəridə TransactionScopedEntityManager sinfi olmalıdır. Çünki class = fayl, sonra “içerir”i axtarın. Yəni belə bir şey: Alt+F1Alt+F2Ctrl + \Alt+FAlt+F7
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 22
İndi isə gəlin nəticəni gözləyək. O səni gözlətməyəcək)
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 23
İndi biz haradasa onun mənbə kodunu tapmalıyıq. Və 2 seçim var: Gəlin, bəlkə də, ikincisini istifadə edək. Gəlin orada tapaq:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 24
İndi asılılığın təsvirinə keçək. Bu səhifədə mənbə kodunu yükləyə bilərsiniz. Əla, indi kodu endirmişik. Yalnız kitabxananı birləşdirmək qalır. Çox sadə bir şəkildə bağlanır. Layihə parametrlərini açmalıyıq:
IntelliJ IDEA və Debug: Dalğıc deyil, snorkeling - 25
Orada "Kitabxanalar" ı seçirik və alınan mənbə kodlarını "Mənbələr" bölməsinə əlavə edirik və "Siniflər" bölməsində Far Manager istifadə edərək tapdığımız WildFly qovluğundan kitabxana jar faylının özünü göstəririk. Bundan sonra biz F7-də naviqasiya etdikdə biz AbstractEntityManager və TransactionScopedEntityManager siniflərinin məzmununu görəcəyik və həmçinin Ctrl+N istifadə edərək sinif üzrə axtarış vasitəsilə əlçatan olacaqıq.

Şərtlərlə Break Points

İndi Break Points-ə qayıdaq. Bəzən biz həmişə dayanmaq istəmirik, ancaq bir şərtlə. Nə etməli? Və burada bizim IDE də bizə kömək edəcək. Break Point qoymaqla biz ona şərt təyin edə bilərik. Məsələn, bir nöqtə qoyun və üzərinə sağ vurun:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
İndi kəsilmə nöqtəsi yalnız ad Maksimilian olduqda işə düşəcək. Daha çox düyməsini klikləməklə, Break Points üçün genişləndirilmiş parametrlər dəsti sizin üçün əlçatan olacaq.

İstisnalar üzrə fasilə nöqtələri

Bəzən səhv ala bilərik və bunun haradan gəldiyini izləmək istəyirik. Sonra kəsmə nöqtəsini müəyyən bir kod xəttinə deyil, istisnanın atılacağı yerə əlavə edə bilərik. Bunu etmək üçün bütün kəsmə nöqtələrinin siyahısını genişləndirməlisiniz:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
Və seçilmiş istisna növü üçün yeni qayda yaradın:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
Məsələn, NPE üçün:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

HotSwap dərsləri

Debugger heyrətamiz bir şeydir. Sazlama ilə yanaşı, sinifləri dəyişdirməyə imkan verir! Bəli, resurslar (məsələn, xhtml səhifələri kimi) bu qədər asanlıqla dəyişdirilə bilməz. Lakin java siniflərinin kodu tez dəyişdirilə bilər (bu, Hot Swap adlanır). Bunu etmək üçün, əlavə edilmiş sazlayıcı ilə sinfi dəyişdirin və Run -> Dəyişən Sinifləri Yenidən Yükləyin. Bu mövzuda faydalı baxış: JVM-də kodu dəyişdirməyin 4 pulsuz yolu

Nəticə

Sazlayıcı, tərtibatçıya icra kodunun dərinliklərinə nüfuz etməyə və onu hər bir detalda öyrənməyə imkan verən güclü bir vasitədir. Bu, ən qarışıq səhvləri düzəltməyə imkan verir. O, həmçinin müəyyən kitabxanaların necə işlədiyini daha yaxşı başa düşməyə imkan verir. Hətta belə bir qısa baxış olduqca təsir edici oldu, amma ümid edirəm ki, faydalı və maraqlı olacaq. Kimsə bu materialla maraqlanırsa, aşağıdakı keçidlərdən istifadə edərək dalışa davam edə bilərsiniz:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#Viaçeslav
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION