JavaRush /Блоги Java /Random-TG /IntelliJ IDEA ва Debug: на ғаввос, балки snorkeling
Viacheslav
Сатҳи

IntelliJ IDEA ва Debug: на ғаввос, балки snorkeling

Дар гурӯҳ нашр шудааст
Навиштани code нисфи мубориза аст. Онро хануз дуруст кор кардан лозим аст. IDE ва абзорҳои ислоҳкунӣ дар ин кор ба мо кӯмак мекунанд.
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 1
Бо истифода аз IntelliJ IDEA ҳамчун намуна, ман пешниҳод мекунам, ки бо он шинос шавам, ки чӣ гуна мо метавонем фаҳмем, ки ҳангоми кор бо codeи мо чӣ мешавад. Debug як мавзӯи васеъ аст, бинобар ин ин барраси ғаввоси амиқро, ба монанди ғаввос пешниҳод намекунад. Аммо ман умедворам, ки snorkeling ҳатман)

Муқаддима

Қисми навиштани codeи он ислоҳ карда мешавад. Ва агар вазифаҳои шумо дастгирии codeро дар бар гиранд, ислоҳи боз ҳам бештар хоҳад буд. Хуб, илова бар ин, бо ёрии ислоҳи ислоҳ, шумо метавонед кори китобхонаҳо ва чаҳорчӯбаҳое, ки истифода мешаванд, то андозае амиқтар тафтиш кунед, ки шумо метавонед худро дар ҷангали рамзи ягон каси дигар ғарқ кунед. Барои ғарқ кардани мо ба мо лозим аст: Аввалан, бойгонии зеркашидашударо бо рамзи сарчашмаи Quick Start кушоед. IntelliJ Idea-ро оғоз кунед ва " Лоиҳаи нав аз манбаъҳои мавҷуда " -ро эҷод кунед. Файли pom.xml -ро дар зердиректорияи hibernate4 интихоб кунед . Ҳангоми воридот, " Воридоти лоиҳаҳои Maven ба таври худкор " -ро муайян кунед ва эҷоди лоиҳаро анҷом диҳед ва танзимоти дигарро бетағйир гузоред. Ҳангоми воридоти лоиҳа, serverи замимаи WildFly-и зеркашидашударо ба ягон директория кушоед. Мо serverро бо истифода аз файл оғоз мекунем (ё standalone.sh барои системаҳои *nix). (!) Муҳим аст, ки бо параметри --debug оғоз шавад.Мо интизори оғози server аст. Онҳо ба мо менависанд, ки он дар оғоз шудааст ва вақтро нишон медиҳанд. Он чизе монанди ин хоҳад буд: bin\standalone.bat
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 2
Баъдан, мо бояд лоиҳаеро, ки мо дар server интихоб кардем, иҷро кунем. Ин раванд дар ҳуҷҷатҳои хурде тасвир шудааст, ки онро дар худи лоиҳа пайдо кардан мумкин аст: \hibernate4\README.adoc Тавре ки дар ин ҳуҷҷат нишон дода шудааст, мо бояд фармонро дар директорияи hibernate4 иҷро кунем: mvn clean package wildfly:deploy Мо мунтазири паёме ҳастем, ки сохтмон бомуваффақият анҷом ёфт:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 3
Пас аз ин, дар гузориши server мо метавонем бубинем, ки чӣ гуна лоиҳаи нав "ҷойгир" шудааст:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 4
Пас аз ин, мо ба саҳифа меравем http://localhost:8080/wildfly-hibernate4ва мо бояд саҳифаеро бо варақаи " Бақайдгирии аъзоён " нишон диҳем. Ҳамин тавр, омодагии мо ба таҷрибаҳо анҷом ёфт ва мо метавонем оғоз кунем)) Барои возеҳият дар пеш расмҳои зиёде хоҳанд буд, аз ин рӯ омода шавед)

Debug дурдаст

Ҳамин тавр, мо бояд ҳолати Debug-ро танзим кунем, то IDE-и мо иҷрои codeро дар serverи барнома назорат кунад. IntelliJ Idea дар ду version меояд: ройгон (Ҷамъият) ва пулакӣ (Ultimate). Охиринро дар шакли EAP расман санҷидан мумкин аст. Дар versionи ниҳоӣ ҳама чиз оддӣ аст - serverи барномаро мустақиман аз IDE дар реҷаи дебаг оғоз кардан мумкин аст. Аммо дар versionи ҷомеа ба шумо лозим аст, ки чанд чизро дастӣ иҷро кунед. Аз ин рӯ, биёед як парвандаи мураккабтарро баррасӣ кунем, яъне. танзим дар versionи ҷомеа. Варианти ҷомеа баъзе маҳдудиятҳо дорад. Аз ҷумла, шумо наметавонед serverи барномаро аз он идора кунед. Аммо шумо метавонед ислоҳи дурдаст (Remote Debug) насб кунед, вақте ки дар ҷои алоҳида serverи фаъол бо барномае, ки ба мо лозим аст, мавҷуд аст. Биёед тавсифи танзимотро аз ин ҷо истифода барем: Debug дурдасти Wildfly дар нашри ҷомеаи IntelliJ Idea (танзимкунии Конфигуратсияи Иҷроиши дурдаст барои порти 8787). Пас аз конфигуратсия, мо конфигуратсияи нави худро дар реҷаи Debug оғоз мекунем:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 5
Агар ҳамааш хуб бошад, мо дар ин бора паёмеро дар зер мебинем:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 6

Раванди ислоҳ

Биёед сабтро ислоҳ кунем. Барои ин, мо бояд пеш аз ҳама дар бораи ҷойе, ки мо онро кашф мекунем, муайян кунем. Аз рӯи тиреза, ба мо тугмаи "Бақайдгирӣ" лозим аст. Биёед онро дар code пайдо кунем. Ҳамин тавр, ба мо элемент лозим аст, он бояд матн дошта бошад: "Бақайдгирӣ". Ё вай бояд бо он коре дошта бошад. Клик кунед Ctrl+Shift+Fва барои Регистрро дар нохунак ҷустуҷӯ кунед. Мо мебинем, ки яке дар index.xhtml вуҷуд дорад.
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 7
Барои рафтан ба манбаи пайдошуда Enter-ро пахш кунед:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 8
Ҳамин тавр, мо мебинем, ки ҳангоми бақайдгирӣ, memberController.register даъват карда мешавад.Аз афташ, ин бояд як навъ синфи java бошад. Клик кунед Ctrl+Nва ҷустуҷӯ кунед:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 9
Дар ҳақиқат, чунин синф вуҷуд дорад. Биёед ба он ворид шавем. Аз афташ, бояд усули бақайдгирӣ вуҷуд дошта бошад. Клик кунед Ctrl+F12ва усули сабти номро ҷустуҷӯ кунед
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 10
Дар ҳақиқат, мо онро ёфтем. Эҳтимол, бақайдгирӣ дар ин ҷо, дар memberRegistration.register рух медиҳад . Ctrl -ро пахш кунед ва усули "афтидан" -ро клик кунед:
IntelliJ IDEA ва Debug: На ғаввос, балки snorkeling - 11
Биёед ҳоло "нуқтаи шикастан" ё Нуқтаи шикастанро муқаррар кунем. Ин нишонаест, ки мегӯяд, ки иҷрои code дар куҷо бояд таваққуф кунад. Дар айни замон мо имконият пайдо мекунем, ки бисёр чизҳои ҷолибро омӯзем. Барои гузоштани он, шумо бояд дар ҷои рости рақами сатр клик кунед.
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 12
Дар саҳифаи http://localhost:8080/wildfly-hibernate4 майдонҳоро пур кунед ва тугмаи Регистрро пахш кунед. Тасвири идея дар панел чашмак мезанад:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 13
Агар ба Idea гузаред, шумо мебинед, ки дар панели дебаг бисёр маълумоти ҷолиб мавҷуд аст:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 14
Дар ин ҷо шумо метавонед арзиши майдонҳои an objectро бинед. Масалан, узви бақайдгирифташуда аз чӣ иборат аст:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 15
бузург. Боз чӣ кор карда метавонем? Мо метавонем менюи контекстиро кушоем ва дар он ҷо Баҳодиҳии ифодаро интихоб кунем (ё тавассути менюи Иҷро кардан -> Баҳодиҳии ифода). Беҳтараш, дар панели идоракунии ислоҳкунанда:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 16
Ин як қобorяти олиҷаноб дар нуқтаи танаффус аст, ки ба ҳама чизҳое, ки он нуқтаи code дастрасӣ дорад, барои иҷрои ҳама гуна codeе, ки дар он лаҳза иҷро карда мешавад, дастрасӣ дорад. Барои намуна:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 17
Дар панели идоракунии ислоҳкунанда инчунин тугмаҳои идоракунӣ мавҷуданд, ки барои ба куҷо интиқол додани назорати ҷараёни барнома масъуланд. Оё ин ҷоду нест?) Бо пахш кардани тугмаи F8 (Step Out), мо бе ворид кардани усулҳо рамзро мегузарем. Бо пахш кардани тугмаи F9, мо дар байни сатрҳои code бо debugger қатъ мекунем ва ба ислоҳкунанда назорати иҷрои барномаро медиҳем. Агар мо тугмаи F7-ро пахш кунем (Қадам ба дохил), он гоҳ мо codeро мегузарем ва ҳар як усулеро, ки дар роҳ вохӯрем, ворид мекунем. Дар омади гап, ба ин блоки иттилоотӣ диққати махсус диҳед:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 18
Ин риштаеро, ки мо дар он ҳастем ва усулҳои стеки риштаи ҷорӣ нишон медиҳад. Аммо ин ҳама нест. Барои роҳат шумо метавонед ҷадвали чаҳорчӯбҳоро кушоед. Барои ин, он бояд фаъол карда шавад:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 19
Ҳоло дар ҷадвали чаҳорчӯба мо маълумотро дар бораи гузариш аз усул ба усул мебинем, зеро бо истифода аз Step Into роҳ рафтанро оғоз кард.
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 20
Тавре ки мо мебинем, мо наметавонем ҳамеша ба он ҷое, ки ҳоло барнома иҷро карда мешавад, интиқол дода шавад. Мо ҳоло дар "getDelegate:469, AbstractEntityManager(org.jboss.as.jpa.container)" ҳастем. Аммо дар асл мо дар амал татбиқ шуда истодаем. Инро синфи муайянкардаи ин нишон медиҳад:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 21
Биёед инро дида бароем. Тавре ки мо медонем, он ба an objectи ҷорӣ ишора мекунад. Мо дар TransactionScopedEntityManager ҳастем. Чаро Idea наметавонад codeро ба мо нишон диҳад? Гап дар он аст, ки IntelliJ Idea айни замон дар бораи ягон TransactionScopedEntityManager намедонад, зеро он ба лоиҳаи мо пайваст нест (он дар вобастагии лоиҳа нест). Вақте ки serverи барнома кор мекунад, дар дохor он китобхонаҳои зиёде мавҷуданд. Аммо мо дар бораи онҳо хеле кам медонем, зеро ... Умуман, ба мо лозим нест, ки дохorро омӯзем, танҳо барои кор кардан лозим аст. Аммо баъзан кор ё шавқи варзиш инро талаб мекунад. Сипас, шумо бояд Idea-ро дар бораи ин китобхона хабардор кунед, то он донад, ки рамзи синфро аз куҷо гирифтан мумкин аст.

Пайваст кардани китобхонаҳои тарафи сеюм барои ислоҳи хатогиҳо

Аввалан, худи мо бояд фаҳмем, ки он чӣ гуна китобхона аст, ки бояд пайваст карда шавад. Роҳи аввал душвортарин аст - ҷустуҷӯ дар Интернет. Суръат ва натиҷаи дарёфти натиҷа аз он вобаста аст, ки лоиҳа то чӣ андоза дуруст идора карда шудааст. Масалан, WildFly дорои анбори кушода аст. Ҳамин тавр, вақте ки мо Google-и "TransactionScopedEntityManager"-ро Google мекунем, мо ба https://github.com/wildfly/wildfly/tree/master/jpa/subsystem меравем ва мефаҳмем, ки ба мо wildfly-jpa лозим аст. Усули дуюм дуруст аст. Дар куҷо server аст, ба он ҷо нигаред. Воситаҳои гуногун метавонанд ба ин кӯмак расонанд. Масалан, дар Windows он метавонад Manager Far бошад . Дар зер намунаи алгоритми ҷустуҷӯ оварда шудааст. Пас аз насб ва ба кор андохтани он, Tab-ро барои гузаштан ба яке аз ҷадвалҳо, бо истифода аз Alt+F1ҷадвали чап ё Alt+F2рост, ва қисмати лозимаро дар диски сахт интихоб кунед. Эҳтимол дорад, ки худи директорияи Far Manager пас аз насбкунӣ дар Manager Far кушода шавад. Барои ба решаи диск рафтан, -ро пахш кунед Ctrl + \. Истифодаи Alt+Fравзанаи ҷустуҷӯро кушоед, ворид кардани номи директорияро оғоз кунед ва пас аз пайдо шудани директория Enter-ро пахш кунед. Ин ҷустуҷӯ оқилона аст ва он феҳристҳоеро, ки ба матни ҷустуҷӯ мувофиқанд, таъкид мекунад. Агар шумо аломатҳоеро ворид кунед, ки барои онҳо ҷузвдонҳо вуҷуд надоранд, ин гуна аломатҳоро ворид кардан ғайриимкон аст. Бо ин роҳ мо ба директорияи serverи барномаҳо меравем. Фарз мекунем, ки мо намедонем, ки модулҳо дар server дар куҷо ҷойгиранд. Шояд ин бори аввал дар ҳаёти шумост, ки шумо дар бораи як намуди WildFly мешунавед. Alt+F7Аз ин рӯ, барои ҷустуҷӯи файлҳо фавран ин ҷо клик кунед . Ҳамин тавр, мантиқ талаб мекунад: ба мо файл бо китобхона лозим аст. Яъне ба мо зарфе лозим аст. Дар дохor синфи TransactionScopedEntityManager бояд бошад. Зеро class = файл, пас "дарбар мегирад" -ро ҷустуҷӯ кунед. Яъне чизе монанди ин:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 22
Акнун, биёед натиҷаро интизор шавем. Ӯ шуморо интизор нахоҳад буд)
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 23
Ҳоло, мо бояд рамзи сарчашмаи онро дар ҷое пайдо кунем. Ва 2 вариант вуҷуд дорад: Биёед, шояд дуюмро истифода барем. Биёед дар он ҷо пайдо кунем:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 24
Акнун биёед ба тавсифи вобастагӣ гузарем. Дар ин саҳифа шумо метавонед рамзи сарчашмаро зеркашӣ кунед. Аҷоиб, ҳоло мо codeро зеркашӣ кардем. Танҳо пайваст кардани китобхона боқӣ мемонад. Он хеле содда пайваст мешавад. Мо бояд танзимоти лоиҳаро кушоем:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 25
Дар он ҷо мо "Китобхонаҳо" -ро интихоб мекунем ва рамзҳои сарчашмаҳои гирифташударо ба бахши "Сарчашмаҳо" илова мекунем ва дар бахши "Синфҳо" мо худи файли кӯзаи китобхонаро аз феҳристи WildFly нишон медиҳем, ки онро бо истифода аз Far Manager пайдо кардем. Пас аз ин, вақте ки мо тавассути F7 паймоиш мекунем, мо мундариҷаи синфи AbstractEntityManager ва TransactionScopedEntityManagerро мебинем ва инчунин тавассути ҷустуҷӯ аз рӯи синф бо истифода аз Ctrl+N дастрас мешаванд.

Нуқтаҳои танаффус бо шартҳо

Биёед ҳоло ба Нуқтаҳои Танаффус баргардем. Баъзан, мо на ҳамеша мехоҳем, ки таваққуф кунем, аммо танҳо дар баъзе шароит. Чӣ бояд кард? Ва дар ин ҷо IDE мо низ ба мо кӯмак хоҳад кард. Бо гузоштани нуқтаи танаффус, мо метавонем ба он шарт таъин кунем. Масалан, нуқтаеро гузошта, бо тугмаи рости муш пахш кунед:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 26
Акнун нуқтаи қатъшавӣ танҳо вақте оташ мегирад, ки ном Максимorан аст. Бо пахш кардани тугмаи More, маҷмӯи васеъи танзимот барои Нуқтаҳои Танаффус ба шумо дастрас мешавад.

Нуқтаҳои танаффус дар истисноҳо

Баъзан мо метавонем хатогие гирем ва мо мехоҳем пайгирӣ кунем, ки он аз куҷост. Он гоҳ мо метавонем нуқтаи танаффусро на дар сатри мушаххаси code, балки дар ҷойе, ки истисно партофта мешавад, илова кунем. Барои ин ба шумо лозим аст, ки рӯйхати ҳамаи нуқтаҳоро васеъ кунед:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 27
Ва барои навъи истиснои интихобшуда қоидаи нав эҷод кунед:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 28
Масалан, барои NPE:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 29

Дарсҳои HotSwap

Debugger як чизи аҷиб аст. Илова ба ислоҳи ислоҳ, он ба шумо имкон медиҳад, ки синфҳоро тағир диҳед! Бале, захираҳоро (масалан, саҳифаҳои xhtml) ба осонӣ тағир додан мумкин нест. Аммо рамзи синфҳои javaро дар парвоз иваз кардан мумкин аст (инро Hot Swap меноманд). Барои ин, танҳо синфро бо debugger замимашуда иваз кунед ва Иҷро кунед -> Синфҳои тағирёфтаро аз нав бор кунед. Баррасии муфид дар ин мавзӯъ: 4 роҳи ройгони иваз кардани code дар JVM

Хулоса

Debuger як воситаи пурқувватест, ки ба таҳиякунанда имкон медиҳад, ки ба умқи codeи иҷрокунанда ворид шавад ва онро бо ҳар як ҷузъиёт омӯзад. Ин ба шумо имкон медиҳад, ки хатогиҳои печидатаринро ислоҳ кунед. Он инчунин ба шумо имкон медиҳад, ки беҳтар фаҳмед, ки китобхонаҳои муайян чӣ гуна кор мекунанд. Ҳатто чунин баррасии мухтасар хеле таъсирбахш буд, аммо ман умедворам, ки он муфид ва ҷолиб хоҳад буд. Агар касе ба ин мавод таваҷҷӯҳ дошта бошад, шумо метавонед бо истифода аз истинодҳои зерин ғаввосро идома диҳед:
IntelliJ IDEA и Debug : Не дайвинг, но снорклинг - 30
#Вячеслав
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION