JavaRush /Блоги Java /Random-TG /Debug дар Intellij IDEA: дастур барои шурӯъкунандагон
Roman Beekeeper
Сатҳи

Debug дар Intellij IDEA: дастур барои шурӯъкунандагон

Дар гурӯҳ нашр шудааст
Салом ба ҳама, ҷомеаи JavaRush. Имрӯз мо дар бораи ислоҳкунӣ сӯҳбат хоҳем кард: ин чист ва чӣ гуна ислоҳ кардан дар Intellij IDEA. Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 1Мақола барои одамоне пешбинӣ шудааст, ки аллакай дар бораи Java Core маълумоти кам доранд. Барои нашри китобхонаҳо чаҳорчӯба ё равандҳои мураккаб вуҷуд надоранд. Роҳи осон. Пас, худро бароҳат ҳис кунед ва биёед оғоз кунем!

Чаро ба шумо Debug лозим аст?

Биёед фавран равшан кунем: бе хато code нест... Хаёт хамин тавр мегузарад. Аз ин рӯ, мо набояд фавран ланг шавем ва аз ҳама чиз даст кашем, агар code тавре ки мо интизор будем, кор накунад. Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 2Аммо чӣ бояд кард? Албатта, шумо метавонед онро System.out.printlnдар ҳар ҷое, ки имконпазир аст, насб кунед ва сипас натиҷаро дар терминал ба тартиб оред, ба умеди он ки шумо хатогиро пайдо мекунед. Бо вуҷуди ин, ин имконпазир аст ... ва онҳо ин корро мекунанд, ва онҳо ин корро бодиққат бо истифода аз сабти ном (шумо метавонед дар ин ҷо хонед ). Аммо агар имконпазир бошад, ки codeро дар мошини маҳаллӣ иҷро кунед, беҳтар аст Debug -ро истифода баред . Дарҳол қайд кардан мехоҳам, ки дар ин мақола мо ислоҳи лоиҳаро дар дохor Intellij IDEA баррасӣ хоҳем кард. Агар шумо ба хондан дар бораи ислоҳи дурдаст таваҷҷӯҳ дошта бошед, дар ин ҷо мақола аз манбаи мост .

Debug чист

Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 3Debug раванди ислоҳи (тафтиш) code мебошад, ки ҳангоми иҷрои он шумо метавонед дар ҷои таъиншуда таваққуф карда, рафти иҷроишро тамошо кунед. Ҳолати барномаро дар ҷои муайян фаҳмед. Ин маҳз ҳамон тавре аст, ки агар шумо метавонед ҳаётро қатъ кунед ва ба ҳама чиз аз берун нигоҳ кунед. Хуб, дуруст? Ҳадафи мо ин аст, ки зуд ва ба осонӣ омӯхтани тарзи ислоҳи барномаҳоро бо истифода аз муҳити дӯстдоштаи таҳияи мо Intellij IDEA.

Он чизе ки ба шумо лозим аст, ки ислоҳро оғоз кунед

Ман маслиҳати ройгон медиҳам: ҳангоми хондани мақола, ҳама чизеро, ки дар ин ҷо тавсиф мешавад, иҷро кунед, хушбахтона барои ин ҳама чиз вуҷуд дорад. Ба шумо чӣ лозим:
  1. Нусхаи муҳити таҳияи Intellij IDEA 2019.3.1 ва навтар. Агар касе онро надошта бошад, дар ин ҷо пайванде ҳаст , ки шумо метавонед онро зеркашӣ кунед. Нашри Community -ро зеркашӣ кунед, зеро он чизест, ки ман истифода хоҳам кард.
  2. Лоиҳаро аз GitHub клон кунед ва онро тавассути IDEA ворид кунед.
Кушодани IDEA: Лоиҳаи debug-presentationDebug дар Intellij IDEA: дастур барои шурӯъкунандагон - 4 -ро интихоб кунед , OK -ро пахш кунед ва ба даст оред: Лоиҳаи воридотро аз манбаъҳои беруна тарк кунед , Maven ва Анҷом -ро пахш кунед . Пас аз ворид кардани лоиҳа, мо метавонем равандро бо мисоли зинда тавсиф кунем. Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 5

Як назария... Ман ваъда медиҳам: D

Барои оғоз кардани ислоҳи каме, шумо бояд фаҳмед, ки breakPoint чист ва фаҳмед, ки чанд тугмаҳои hotkeys, ки шумо бояд оғоз кунед. BreakPoint як аломати махсусест, ки макон ё ҳолатеро нишон медиҳад, ки дар он барнома бояд қатъ карда шавад. Шумо метавонед нуқтаи танаффусро бо клики чапи чапи панели чап ё бо пахш кардани макони рамз ва пахш кардани Ctrl + F8 муқаррар кунед . Нуқтаҳои кандашавӣ дар се намуд меоянд: аломати хат, аломати тағирёбанда ва аломати метод. Чунин ба назар мерасад:
  • Дар як сатр:

    Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 6

    агар дар ифода ламбда мавҷуд бошад, пас IDEA ба шумо интихоби интихобро пешниҳод мекунад - ифодаро дар тамоми сатр ё махсусан дар ламбда гузоштан:

    Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 7
  • Ба як усул:

    Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 8
  • Дар як синф

    Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 9
Нуқтаҳои танаффусро тавассути иҷро кардани ҳамон қадамҳое, ки ҳангоми илова кардани онҳо бартараф кардан мумкин аст. Ҳолатҳое ҳастанд, ки шумо бояд онҳоро ғайрифаъол кунед (хомуш). Барои ин, дар қисмати Debug, шумо метавонед нишонаеро пайдо кунед Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 10, ки ҳамаи нуқтаҳоро ғайрифаъол месозад. Барои дидани он, ки кадом нуқтаҳо аллакай муқаррар шудаанд, шумо метавонед ё ба Debug дар кунҷи чапи поёни равед ва нишонаи ро пайдо кунед Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 11, ё Ctrl+Shift+F8 -ро пахш кунед : Debug дар Intellij IDEA: дастур барои шурӯъкунандагон - 12Вақте ки мо ба рӯйхати нуқтаҳо меравем, мо мебинем: Debug в Intellij IDEA: гайд для новичков - 13Ду нуқтаи пешаки вуҷуд дорад. Ин ҷо:
  • Bee.java:24 - дар синфи Bee дар хати 24
  • Main.java:14 - дар синфи асосӣ дар сатри 14
Ман мехоҳам қайд намоям, ки ҳангоми клон кардани лоиҳа шумо ин BreakPoints нахоҳед дошт: шумо бояд онҳоро худатон насб кунед! Инчунин як бахши истинодҳои истисноии Java мавҷуд аст . Як чизи хеле муфид. Бо истифода аз он, шумо метавонед нуқтаи қатъии номуайянро илова кунед, то барнома пеш аз партофтани ягон истисно ё ягон истисно қатъ шавад. Биёед барои RuntimeException нуқтаи қатъии номуайянро илова кунем. Ин ба осонӣ анҷом дода мешавад: дар кунҷи болоии чап аломати плюс "+" мавҷуд аст. Онро клик кунед ва Java Exceptions Breakpoints -ро интихоб кунед : Debug в Intellij IDEA: гайд для новичков - 14Дар равзанаи пайдошуда номи истисноеро, ки бояд илова карда шавад, нависед, аз рӯйхати пешниҳодшуда интихоб кунед ва OK -ро пахш кунед : Debug в Intellij IDEA: гайд для новичков - 15Мо ин барномаи таълимиро ба итмом мерасонем ва ба амалия мегузарем.

Биё равем, биёед ба ваҳшӣ аз debug мешиканем

Debug в Intellij IDEA: гайд для новичков - 16Азбаски ман занбӯрпарвари ирсӣ ҳастам, барои муаррифии ислоҳот ман лоиҳаеро таҳия кардам, ки раванди ҷамъоварӣ аз гарди занбӯри асал, коркарди гарди асал ва аз ќуттї гирифтани асалро тавсиф мекунад. Дар асоси ҳуҷҷатҳои файли README, ки дар решаи лоиҳа ҷойгир аст, мо мехонем: рафтори интизорӣ - аз ҳама гулҳое, ки аз онҳо нектар ҷамъоварӣ карда мешавад (ҳамчун арзиши дукарата ), миқдори асал ба нисфи гарди ҷамъовардашуда. Лоиҳа дорои синфҳои зерин аст:
  • Занбур - занбӯри оддии коргарӣ;
  • BeeQueen - занбӯри малика;
  • занбӯри асал - занбӯри асал;
  • HoneyPlant - растании асал, ки аз он асал ҷамъоварӣ мешавад;
  • Асосӣ - дар куҷо public static void main()усуле, ки лоиҳа оғоз меёбад, ҷойгир аст.
Агар шумо усулро иҷро кунед main(), маълум мешавад, ки на танҳо миқдори асал ҳисоб карда намешавад, балки хатогӣ низ пайдо мешавад... Debug в Intellij IDEA: гайд для новичков - 17Шумо бояд бубинед, ки дар он ҷо чӣ хатост. Аз пайгирии стек дар кунҷи рости поён, мо мебинем, ки дар HoneyPlant.java:20, RuntimeException партофта шудааст: Debug в Intellij IDEA: гайд для новичков - 18Ин маҳз ҳолати мост: RuntimeException вуҷуд дорад, биёед ҷустуҷӯи чунин истисноро, тавре ки дар боло тавсиф шудааст, илова кунем ва main()усулро дар ҳолати ислоҳ. Барои ин кор, пеш аз метод : тирчаи секунҷаи сабзро дар Intellij IDEA клик кунед main(): Debug в Intellij IDEA: гайд для новичков - 19ва мо барномаи қатъшударо дар лаҳзаи ба кор андохтани истисно бо ин нишона мегирем.Барои Debug в Intellij IDEA: гайд для новичков - 20Debug в Intellij IDEA: гайд для новичков - 21гирифтани маълумоти пурра, шумо бояд дар бахши Debug нигаред. Он дорои Variables мебошад , ки ҳамаи тағирёбандаҳои дар ин қисми барнома мавҷудбударо нишон медиҳад:
  • нектар = 1,0;
  • НектарИқтидори = -1,0.
Истисно ба таври одилона партофта мешавад, зеро арзиши миқдори гарди дар растании асал мавҷудбуда манфӣ буда наметавонад. Аммо чаро ин тавр мешавад? Дар ниҳоят, санҷиш вуҷуд дорад, ки агар нектар тамом шавад, дар сатрҳои 15-17 арзиши сифр баргардонида мешавад:
if ( nectar == 0 ) {
         return 0;
}
Аммо ҷолиб ин аст, ки он тағирёбандаи нодурустро тафтиш мекунад ... ва ин хато дар code аст. Ба ҷои санҷидани арзиши нектар дар гул, ки дар тағирёбандаи nectarCapacity аст , барнома арзиши нектарро месанҷад , ки ба усул ворид мешавад ва он миқдорест, ки онҳо аз гарди он гирифтан мехоҳанд. Ин аст, хатои аввалин! Бинобар ин, мо онро дуруст гузошта, чунин ифодаро мегирем:
if ( nectarCapacity == 0) {
         return 0;
}
Баъдан, мо main()усулро дар ҳолати муқаррарӣ иҷро мекунем (Run `Main.main()`)ва дигар хато нест, барнома кор кард: Барнома Debug в Intellij IDEA: гайд для новичков - 22кор кард ва ҷавоб дод: "33,0 асалро 7 занбӯр аз 2 растании асал истеҳсол кардааст" Ҳама чиз хуб мешуд, аммо ҷавоб ин аст. нодуруст... Ҳамааш барои он ки дар ҳуҷҷати файли README Навишта шудааст, ки нектар дар таносуби 2 ба 1 ба асал табдил меёбад:
## Documentation
Presentation based on honey getting process.

**Note**: 1 honey point = 2 nectar points
Аз усули асосй дида мешавад, ки ду растании асал, мутаносибан 30 ва 40 вохиди асал мавчуд аст, бинобар ин дар охир 35 вохиди асал гирифтан лозим аст. Ва менависад, ки 33. Ду агрегати дигар ба куҷо рафтанд?... Акнун мефаҳмем! Барои ин ба мо лозим аст, ки дар метод Main.main()дар сатри № 28 нуқтаи қатъшавӣ гузорем, ки дар он ҷо иҷро карда мешавад beeHive.populateHoney()ва mainметодро дар реҷаи Debug иҷро кунем: Debug в Intellij IDEA: гайд для новичков - 23Биёед ин нуқтаро бодиққат дида бароем. Барнома пеш аз иҷрои сатри 28 қатъ шуд. Дар поён мо бахши Debug -ро мебинем, ки тамоми маълумотро дар бораи замимаи иҷрошаванда тавсиф мекунад. Қисмати тағирёбандаҳо, тавре ки аллакай зикр гардид, дорои ҳама тағирёбандаҳо ва an objectҳое мебошад, ки аз ин қисми барнома дастрасанд. Қисми Frames қадамҳоеро нишон медиҳад, ки барнома аз он мегузарад, шумо метавонед ба қадами қаблӣ назар кунед ва ҳама маълумоти маҳаллиро гиред. Барои идомаи кор, шумо метавонед тугмаи F9 ё нишони сабзро пахш кунед, ки дар зер нишон дода шудааст: Debug в Intellij IDEA: гайд для новичков - 24Барои қатъ кардани барнома, шумо бояд майдони сурхро клик кунед: Debug в Intellij IDEA: гайд для новичков - 25Барои аз нав оғоз кардани барнома дар реҷаи дебаг, шумо бояд тирчаро пахш кунед: Debug в Intellij IDEA: гайд для новичков - 26Баъдан, барои зина ба зина тавассути барнома гузаштан, шумо метавонед ду калидро истифода баред:
  • F8 - аз қисмати code гузаред ва ба усулҳои дохилӣ дохил нашавед;
  • F7 - аз қисмати code гузаред ва усулҳои дохorро ворид кунед.
Аз ин рӯ, барои ба кор даровардани усул beeHive.populateHoney(), мо бояд F7-ро пахш кунем ва мо идома медиҳем: Баъдан, мо бо истифода аз ин усул то ба охир реҷаи дебагро бо истифода аз F8Debug в Intellij IDEA: гайд для новичков - 27 мегузарем ва тавсиф мекунем, ки дар ин усул чӣ рӯй медиҳад:
  • Хати 25 - Stream API барои ҷамъоварии асал аз ҳама занбӯрҳо истифода мешавад;
  • хати 26 - асал ба мавҷуда илова карда мешавад;
  • Рақами 27 - барои малика 2 воҳиди асал ҷудо карда шудааст;
  • сатри 28 - ин ду адад аз миқдори умумии асал хориҷ карда мешавад;
  • Хатти 29 - бачадон ин асалро мехӯрад.
Ана, ин ду агрегат ба он чо рафтанд, раей! Пас аз муошират бо таҳлилгари тиҷорат, мо ба хулосае меоем, ки файли ҳуҷҷати README хато дорад ва бояд навсозӣ шавад. Биёед файли README-ро навсозӣ кунем:
## Documentation
Presentation based on honey getting process.

**Note**:
*  1 honey point = 2 nectar points
*  2 honey point queen bee eats every time when beehive populates the honey.
Ва ин аст: ҳама хатогиҳои ёфтшуда ислоҳ карда шуданд, мо метавонем оромона нӯшидани қаҳва ва хондани мақолаҳоро дар hub JavaRush бо назари оқилона идома диҳем :)

Ҷамъбаст кунед

Дар ин мақола мо фаҳмидем, ки:
  • кор бе хато нест ва ислоҳ кардан роҳи олии ҳалли онҳост;
  • нуқтаи шикаст чист ва кадом намудҳо вуҷуд доранд;
  • чӣ тавр танзим кардани нуқтаи қатъи истисно;
  • Чӣ тавр дар реҷаи ислоҳот паймоиш кардан мумкин аст.

Мақола барои хондан

Ба мақолаҳои дигари ман низ нигаред:
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION