JavaRush /Java блогу /Random-KY /IntelliJ IDEA жана Debug: дайвинг эмес, сууда сүзүү
Viacheslav
Деңгээл

IntelliJ IDEA жана Debug: дайвинг эмес, сууда сүзүү

Группада жарыяланган
Кодду жазуу - согуштун жарымы. Ал дагы эле туура иштеши керек. IDE жана мүчүлүштүктөрдү оңдоо куралдары бул жагынан бизге көп жардам берет.
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 1
Мисал катары IntelliJ IDEA колдонуу менен, ал иштегенде codeубузга эмне болорун кантип билсек болору менен таанышууну сунуштайм. Мүчүлүштүктөрдү оңдоо - кеңири тема, андыктан бул карап чыгуу суучул сыяктуу терең сууга түшүүнү сунуш кылbyte. Бирок сноркингге ишенем)

Киришүү

Кодду жазуунун бир бөлүгү аны оңдоо болуп саналат. Жана эгер сиздин тапшырмаларыңызда code колдоо камтылса, мүчүлүштүктөрдү оңдоо дагы көп болот. Мындан тышкары, мүчүлүштүктөрдү оңдоонун жардамы менен сиз колдонулган китепканалардын жана фреймворктордун ишин башка бирөөнүн codeунун джунглиине чөмүлүүгө мүмкүн болушунча терең изилдей аласыз. Биздин сууга түшүү үчүн бизге керек болот: Биринчиден, жүктөлүп алынган архивди Quick Start Source Code менен ачыңыз. IntelliJ Ideaны ишке киргизиңиз жана " Учурдагы булактардан жаңы долбоорду " түзүңүз. hibernate4 подкаталогунан pom.xml файлын тандаңыз . Импорттоодо “ Maven долбоорлорун автоматтык түрдө импорттоо ” деп белгилеңиз жана башка орнотууларды өзгөртүүсүз калтырып, долбоорду түзүүнү аяктаңыз. Долбоор импорттолуп жатканда, жүктөлүп алынган WildFly колдонмо serverин кандайдыр бир каталогго ачыңыз. Биз serverди файлды bin\standalone.bat(же *nix системалары үчүн standalone.sh) колдонуп баштайбыз. (!) --debug параметринен баштоо маанилүү.Биз serverдин башталышын күтөбүз. жылы башталганын жазып, убактысын көрсөтүп беришет. Ал төмөнкүдөй көрүнөт:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 2
Андан кийин биз serverде тандап алган долбоорду иштетишибиз керек. Бул процесс долбоордун өзүнөн таба турган кичинекей documentацияда сүрөттөлөт: \hibernate4\README.adoc Бул documentацияда көрсөтүлгөндөй, биз hibernate4 каталогунда буйрукту иштетишибиз керек: mvn clean package wildfly:deploy Биз куруу ийгorктүү аяктады деген билдирүүнү күтүп жатабыз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 3
Андан кийин, server журналында биз жаңы долбоор кантип "орноштурулганын" көрө алабыз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 4
Андан кийин, биз баракка барабыз жана биз " Мүчөлөрдү каттооhttp://localhost:8080/wildfly-hibernate4 " формасы менен баракты көрсөтүшүбүз керек . Ошентип, эксперименттерге даярдыгыбыз аяктады жана биз баштай алабыз)) Алдыда ачык-айкын болушу үчүн көптөгөн сүрөттөр болот, андыктан даярданыңыз)

Remote Debug

Ошентип, биз Debug режимин конфигурациялашыбыз керек, биздин IDE колдонмо serverинде codeдун аткарылышын көзөмөлдөйт. IntelliJ Idea эки versionда келет: бекер (Коомчулук) жана акы төлөнүүчү (Ultimate). Акыркысы расмий түрдө EAP түрүндө сыналышы мүмкүн. Ultimate versionсында бардыгы жөнөкөй - тиркеме serverин мүчүлүштүктөрдү оңдоо режиминде түздөн-түз IDEден ишке киргизүүгө болот. Бирок Коомчулуктун versionсында сиз бир нече нерсени кол менен жасашыңыз керек. Ошондуктан, бир кыйла татаал ишти карап көрөлү, б.а. Коомдоштук versionсында жөндөө. Коомчулуктун versionсында кээ бир чектөөлөр бар. Атап айтканда, сиз андан колдонмо serverин иштете албайсыз. Бирок сиз алыстан мүчүлүштүктөрдү оңдоону (Remote Debug) орното аласыз, качан өзүнчө жерде бизге керектүү тиркеме менен иштеп жаткан server бар. Келгиле, бул жерден орнотуунун сүрөттөлүшүн колдонолу: IntelliJ Idea коомчулугунун чыгарылышында Wildflyди алыстан оңдоо (8787 порту үчүн Remote Run конфигурациясын орнотуу). Конфигурациялангандан кийин, биз жаңы конфигурациябызды Debug режиминде ишке киргизебиз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 5
Эгер баары жакшы болсо, биз төмөндө бул тууралуу билдирүүнү көрөбүз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 6

Мүчүлүштүктөрдү оңдоо процесси

Жазууну сактоо менен мүчүлүштүктөрдү оңдойлу. Бул үчүн биз биринчиден кайсы жерди изилдей турганыбызды чечишибиз керек. Терезеден караганда, бизге "Катталуу" баскычы керек. Келгиле, аны codeдон табалы. Демек, бизге элемент керек, ал текст болушу керек: "Каттоо". Же ага кандайдыр бир тиешеси болушу керек. Чыкылдатып Ctrl+Shift+F, тырмакчанын ичинде Каттоо дегенди издеңиз. index.xhtmlде бирөө бар экенин көрүп жатабыз.
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 7
Табылган булакка өтүү үчүн Enter баскычын басыңыз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 8
Ошентип, биз каттоодон өтүп жатканда, memberController.register деп аталганын көрүп жатабыз, сыягы, бул кандайдыр бир java классы болушу керек. Басыңыз Ctrl+Nжана издеңиз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 9
Чынында эле, мындай класс бар. Келгиле, ага киришели. Сыягы, реестр ыкмасы болушу керек. чыкылдатып Ctrl+F12, каттоо ыкмасын изде
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 10
Чынында, биз аны таптык. Кыязы, каттоо бул жерде, memberRegistration.register пайда болот . Ctrl баскычын басыңыз жана ага "жыгылып кетүү" ыкмасын басыңыз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 11
Келгиле, азыр "тыныгуу чекити" же Break чекити белгилейли. Бул codeдун аткарылышы кайсы жерде тыным керек экенин көрсөткөн маркер. Бул учурда биз көптөгөн кызыктуу нерселерди үйрөнүүгө мүмкүнчүлүк алабыз. Аны коюу үчүн, саптын номеринин оң жагындагы жерди басышыңыз керек.
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 12
http://localhost:8080/wildfly-hibernate4 бетинде талааларды толтуруп, Каттоо баскычын басыңыз. Панелдеги идея сөлөкөтү өчүп калат:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 13
Идеяга өтүп, мүчүлүштүктөрдү оңдоо панелинде көптөгөн кызыктуу маалыматтар бар экенин көрө аласыз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 14
Бул жерде сиз an objectтин талааларынын маанисин көрө аласыз. Мисалы, катталган мүчө эмнеден турат:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 15
Абдан жакшы. Дагы эмне кылсак болот? Биз контексттик менюну ачып, ошол жерден Экранды баалоону тандайбыз (же меню аркылуу Run -> Баалоо туюнтмасы). Дагы жакшы, мүчүлүштүктөрдү оңдоочу башкаруу панелинде:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 16
Бул токтоо чекитиндеги супер сонун жөндөм, ал codeдук чекит кире алган бардык нерсеге жетүү, ошол учурда аткарыла турган codeду аткаруу. Мисалы:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 17
Мүчүлүштүктөрдү оңдоочу башкаруу панелинде программанын агымын башкарууну каалаган жерге жылдыргыңыз келген башкаруу баскычтары да бар. Бул сыйкыр эмеспи?) F8 (Step Out) баскычын басуу менен биз методдорду киргизбестен codeду басып өтөбүз. F9 баскычын басуу менен, биз мүчүлүштүктөрдү оңдоочу менен code саптары аркылуу жүрүүнү токтотуп, мүчүлүштүктөрдү оңдоочуга программанын аткарылышын көзөмөлдөөнү беребиз. Эгерде биз F7 (Step Into) баскычын бассак, анда биз жолдо жолуккан ар бир ыкманы киргизип, codeдон өтөбүз. Айтмакчы, бул маалымат блогуна өзгөчө көңүл буруңуз:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 18
Бул биз турган жипти жана учурдагы жиптин стекиндеги ыкмаларды көрсөтөт. Бирок бул баары эмес. Ыңгайлуу болуу үчүн, алHowтар ​​өтмөгүн ачсаңыз болот. Бул үчүн, ал иштетorши керек:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 19
Азыр алHowтар ​​кошумча барагында биз ыкмадан методго өтүү жөнүндө маалыматты көрөбүз, анткени Step Into аркылуу code аркылуу жүрө баштады.
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 20
Көрүнүп тургандай, биз дайыма эле программа аткарылып жаткан жерге которула албайбыз. Биз азыр "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" деген жердебиз. Бирок иш жүзүндө биз ишке ашыруудабыз. Бул бул тарабынан көрсөтүлгөн класс менен тастыкталат:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 21
Келгиле, муну карап көрөлү. Белгилүү болгондой, ал учурдагы an objectти көрсөтөт. Биз TransactionScopedEntityManagerдебиз. Эмне үчүн Idea бизге codeду көрсөтө алbyte? Чындыгында IntelliJ Idea учурда эч кандай TransactionScopedEntityManager жөнүндө билбейт, анткени ал биздин долбоорго байланыштуу эмес (ал долбоордун көз карандылыктарында эмес). Колдонмо serverи иштеп жатканда, анын ичинде көптөгөн, ар кандай китепканалар иштейт. Бирок биз алар жөнүндө абдан аз билебиз, анткени... жалпысынан, биз ички иштерге киришүүнүн кереги жок, биз жөн гана иштешибиз керек. Бирок кээде жумуш же спорттук кызыкчылык муну талап кылат. Андан кийин, класс codeун кайдан алууну бorши үчүн, бул китепкана жөнүндө Ideaга маалымат беришиңиз керек.

Мүчүлүштүктөрдү оңдоо үчүн үчүнчү тараптын китепканаларын туташтыруу

Биринчиден, биз өзүбүз түшүнүшүбүз керек, бул кандай китепкана туталышы керек. Биринчи жол абдан татаал - Интернетте издөө. Натыйжаларды табуу ылдамдыгы жана натыйжасы долбоордун канчалык жакшы башкарылганына көз каранды. Мисалы, WildFly ачык репозиторийге ээ. Ошентип, биз Google "TransactionScopedEntityManager" болгондо, https://github.com/wildfly/wildfly/tree/master/jpa/subsystem дарегине өтүп , бизге wildfly-jpa керек экенин табабыз. Экинчи ыкма туура. Сервер кайда, ошол жерден караңыз. Буга ар кандай каражаттар жардам берет. Мисалы, Windowsта ал Far Manager болушу мүмкүн . Төмөндө издөө алгоритминин мисалы келтирилген. Аны орнотуп, ишке киргизгенден кийин, табулатураны колдонуңуз , өтмөктөрдүн бирине өтүңүз, Alt+F1сол өтмөктү же Alt+F2оңду колдонуп, катуу дисктен бизге керектүү бөлүмдү тандаңыз. Орнотуудан кийин Far Manager каталогунун өзү Far Managerде ачык болушу толук мүмкүн. Дисктин тамырына өтүү үчүн, басыңыз Ctrl + \. Колдонуу менен, Alt+Fиздөө терезесин ачып, каталогдун атын терип баштаңыз жана каталог табылгандан кийин Enter баскычын басыңыз. Бул издөө акылдуу жана издөө текстине дал келген каталогдорду баса белгилейт. Эгер сиз папкалары жок белгилерди киргизсеңиз, анда мындай белгилерди киргизүүгө болбойт. Бул жол менен биз колдонмо serverинин каталогуна барабыз. Модулдар serverде кайда жайгашканын билбейбиз дейли. Балким, бул жашооңузда биринчи жолу WildFly жөнүндө угуп жаткандырсыз. Ошондуктан, Alt+F7файлдарды издөө үчүн дароо бул жерди басыңыз. Демек, логика айтат: бизге китепкана менен файл керек. Башкача айтканда, бизге банка керек. Ичинде TransactionScopedEntityManager классы болушу керек. Анткени класс = файл, андан кийин "камтыган" издеңиз. Башкача айтканда, мындай нерсе:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 22
Эми жыйынтыкты күтөлү. Ал сени күтпөйт)
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 23
Эми биз анын баштапкы codeун бир жерден табышыбыз керек. Жана 2 вариант бар: Келгиле, экинчисин колдонолу. Келгиле, ошол жерден табалы:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 24
Эми көз карандылыкты сүрөттөөгө өтөлү. Бул баракта сиз баштапкы codeду жүктөп алсаңыз болот. Жакшы, азыр бизде code жүктөлүп алынды. Болгону китепкананы туташтыруу гана калды. Бул абдан жөнөкөй байланыштырат. Биз долбоордун жөндөөлөрүн ачышыбыз керек:
IntelliJ IDEA жана Debug: Сууга түшүү эмес, сууда сүзүү - 25
Ал жерден биз "Китепканаларды" тандап, алынган баштапкы codeдорду "Булактар" бөлүмүнө кошобуз, ал эми "Класстар" бөлүмүндө биз Far Manager аркылуу тапкан WildFly каталогунан китепкана jar файлын көрсөтөбүз. Андан кийин, биз F7 аркылуу чабыттаганда, биз AbstractEntityManager жана TransactionScopedEntityManager класстарынын мазмунун көрөбүз, ошондой эле Ctrl+N аркылуу класстар боюнча издөө аркылуу жеткorктүү болот.

Шарттары менен Break Points

Эми Break Points'ке кайтып келели. Кээде биз дайыма эле токтогубуз келбейт, бирок кандайдыр бир шартта гана. Эмне кылыш керек? Бул жерде биздин IDE да бизге жардам берет. Break Point коюу менен биз ага шарт коё алабыз. Мисалы, бир чекит коюп, аны оң баскыч менен чыкылдатыңыз:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
Эми токтотуу чекити аты Максимorан болгондо гана күйөт. Көбүрөөк баскычын чыкылdateу менен, Break Points орнотууларынын кеңейтилген топтому сизге жеткorктүү болот.

Өзгөчө учурларда Break Points

Кээде биз ката кетиришибиз мүмкүн жана анын кайдан келип чыкканын байкагыбыз келет. Андан кийин биз үзгүлтүккө учураган чекти codeдун белгилүү бир сабына эмес, өзгөчө учур ташталуучу жерге кошо алабыз. Бул үчүн, сиз бардык үзүлүүчү чекиттердин тизмесин кеңейтишиңиз керек:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
Жана тандалган өзгөчө түрү үчүн жаңы эреже түзүү:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
Мисалы, NPE үчүн:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

HotSwap класстары

Мүчүлүштүктөрдү оңдоочу бул укмуштуу нерсе. Мүчүлүштүктөрдү оңдоодон тышкары, ал класстарды өзгөртүүгө мүмкүндүк берет! Ооба, ресурстарды (мисалы, xhtml баракчалары сыяктуу) оңой эле өзгөртүү мүмкүн эмес. Бирок java класстарынын codeун тез арада алмаштырууга болот (бул Hot Swap деп аталат). Бул үчүн, жөн гана мүчүлүштүктөрдү оңдоочу тиркелген классты өзгөртүп, Run -> Өзгөрүлгөн класстарды кайра жүктөңүз. Бул тема боюнча пайдалуу сереп: JVMдеги codeду ысык алмаштыруунун 4 акысыз жолу

Корутунду

Мүчүлүштүктөрдү оңдоочу - бул иштеп чыгуучуга аткаруучу codeдун тереңине кирип, аны ар бир майда-чүйдөсүнө чейин изилдөөгө мүмкүндүк берген күчтүү курал. Бул эң башаламан каталарды оңдоого мүмкүндүк берет. Ал ошондой эле кээ бир китепканалар кантип иштээрин жакшыраак түшүнүүгө мүмкүндүк берет. Ал тургай, мындай кыскача карап чыгуу абдан таасирдүү болуп чыкты, бирок мен бул пайдалуу жана кызыктуу болот деп үмүттөнөм. Эгер кимдир бирөө бул материалга кызыкдар болсо, төмөнкү шилтемелер аркылуу сууга түшүүнү уланта аласыз:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#Вячеслав
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION