[? DAN ARMADARAS:?] Hi, Unë jam [? Dan Armadaras?]. Sot, ne jemi duke shkuar për të kërkoni në debugging. Jo vetëm do të shkojmë për flasim për disa teknika, por edhe ne do të shikojmë në disa nga karakteristikat e përmbajtur brenda IDE CS50 që lejojnë të lehtë të korrigjoj një program. Vetëm një shembull i diçka që mund të shkojnë keq dhe kjo është në fakt diçka që ne kemi parë tashmë më parë. Në këtë rast, ky është një program C që pranon një numër të plotë nga përdoruesi, ndan atë nga dy, dhe siguron prodhimi përsëri për përdoruesit. Tani nga ajo që ne kemi parë më herët në ligjërata, ne e dimë se ky fakt do të shkaktojë lloje të veçanta të problemeve të ndarjes kur kemi numra tek. Në mënyrë të veçantë, ne vetëm do të hedhin larg çdo gjë pas presjes dhjetore. Tani, ne e dimë se kjo ndodh të jetë rasti. Dhe nëse ne të drejtuar atë, ne mund të konfirmojmë Dyshimet tona, Së pari, duke përpilimit. Dhe pastaj, duke xhiruar dhe hyjnë një numër i rastësishëm. Kjo nuk është asgjë e re. Por kjo është në fakt një shembull i një bug që mund të ekzistojnë brenda një programi më të madh që bëhet më e vështirë për të gjetur. Edhe pse ne e dimë se çfarë çështja është, thelbi i vërtetë i çështjes mund të jetë duke u përpjekur për të identifikuar veçanërisht në rastin kur gabimi ndodh, identifikuar se çfarë këtë problem është, dhe pastaj fiksimin e tij. Pra ofrojnë këtë si një shembull e asaj që mund të jetë diçka që ne tashmë e dimë, por mund të jetë varrosur brenda elementeve të tjera të kodit. Pra, hapjen e këtij burim tjetër Kodi skedë si një shembull, ky problem ndarje është tani pjesë e një programi më të madh. Ende mund të jetë pak bit ndërtuar, dhe ne mund të jetë në gjendje të lehtë të identifikuar atë, veçanërisht pasi ne jemi vetëm duke diskutuar këtë. Por ne mund të kuptoj se ky Problemi mund të ekzistojë në një shkallë më të madhe. Nëse unë përpilojnë këtë dhe tani drejtuar atë, të hyjë një numër i rastësishëm, ne mund të shohim se ne nuk do të marrë saktësisht prodhimit që ne mund të kemi pritur. Në këtë rast të veçantë, mund të themi se ne duan për të numëruar të gjithë numrat nga një deri në një farë numër specifik. Dhe ne mund të shohim se ne kanë një sërë çështjesh këtu nëse ne jemi kompjuteri, thjesht, 0 dhe 1 kur ne japim një kontribut prej 5. Kështu që ne tashmë e dimë se ka një problem këtu. Por ne nuk mund të di saktësisht ku kjo çështje të vërtetë ekziston. Tani një nga mënyrat që ne mund të përpiqemi për të rregulluar këtë është diçka që ne kemi tashmë është futur në. Ne vetëm mund ta përdorin atë në një shkallë më të madhe. On line 14, ne kemi ky funksion printf, e cila na lejon për të shtypur jashtë shtetit e pjesëve të ndryshme të informacionit. Dhe kjo është diçka që ju duhet të levave brenda programit tuaj të përpiqen të kuptoj se saktësisht se çfarë është ndodh në linjat e ndryshme të kodit. Pra, edhe në qoftë se kjo nuk është Prodhimi i fundit që ne në fakt duan të prodhuar nga ky program, ne ende mund të kenë disa debug Deklaratat ku ne mund të përpiqen të kuptoj se pikërisht atë po ndodh brenda kodit tonë. Pra, në këtë rast, unë do të printf me tag debug. Në këtë rast, kjo është vetëm një varg debug që unë jam deri-vënë në mënyrë që të bëhet shumë të qartë në prodhimin e kodin tim çfarë është ajo që unë dua të tregoj. Dhe prodhimit këtu numri që ne kemi llogaritur. Në këtë rast, unë mund duan të dinë saktësisht çfarë po ndodh para dhe pas disa llogaritje të veçantë. Kështu që unë mund të përdorin një printf para dhe pas kësaj linjë e kodit. Në këtë rast, unë mund edhe e bëjnë atë një pak më të qartë duke thënë debug më parë dhe debug pas kaq që unë nuk e ngatërruar veten me Linjat e shumta që duken identike. Tani në qoftë se ne të përpiluar këtë dhe të kandidojë ajo, të hyjë në një numër si pesë përsëri, ne mund të shohim se kemi tani e prodhimit para dhe pas dhe për të gjetur se ne nuk kemi bërë një të qartë ndarje të qartë ose të paturit e numrit që ne të vërtetë duan të bëjnë. Tani, në këtë rast, kjo është jo të vërtetë një prodhim i qartë. Kjo nuk është me të vërtetë një rezultat të qartë se ne duam nga ky program të veçantë. Dhe kjo është, përsëri, një pak ndërtuar. Por, ndoshta, një nga gjërat që ne mund të bëjmë nëse specifikimi tha që ne duam për të ndarë këtë me 2 dhe shtoni 1-- kështu me fjalë të tjera, ne duam të rrumbullakët up-- pastaj ne mund të dimë se ne mund të bëj atë gjë të veçantë, në këtë rast. Tani këtu ne e dimë se do të jemi gjendje për të shtuar 1 në numrin tonë të përgjysmuar. Le të përpiluar këtë dhe konfirmojnë se kjo sillet në mënyrën që ne duam të. Ne mund të shohim se tani para duke pasur, ne kemi numrin 5. Pasi ka, ne kemi numrin e 3, e cila sipas specifikimeve tonë, është ajo që kemi dashur të bëjmë. Por, nëse ne shikojmë në prodhimit këtu, ne mund të shihni se ne mund të kemi një tjetër bug krejt, i cili është se ne jemi duke filluar numërimin tonë nga 0. Tani përsëri, kjo është diçka që kemi parë në të kaluarën dhe ne mund të rregullojmë mjaft lehtë. Por në këtë rast, ne gjithashtu kishte dobi e përdorur deklaratën printf direkt brenda për lak të dinë saktësisht se ku se gabimi u ndodh. Deklaratat Pra printf janë shumë të dobishme për të ndihmuar ju të përcaktojë se ku, pikërisht në kodin tuaj burim, një gabim i veçantë po ndodh. Dhe është gjithashtu e rëndësishme që të kuptojnë që, si ne jemi duke shkruar kodin, ne mund të kemi supozime në lidhje me gjendjen e një programi. Ose ne mund të kemi supozime për atë pjesë e programit në fakt është i saktë apo i pasaktë kur më vonë si ne ndërtojmë mbi atë program dhe e bëjnë atë pjesë e një kompleks dhe programin më të mëdha se ne e kuptojmë se disa aspekt e që në fakt është buggy. Duke përdorur printf me të vërtetë mund të ndihmojë kufizoni dhe identifikimin rajonet e një program që mund të mos të sillen saktësisht mënyrën se si ne presin, bazuar në supozimet tona. Por ka mjete të tjera në dispozicion, si edhe, që të na lejojë të përpiqen të kuptoj nga ku një gabim po ndodh dhe gjithashtu, në veçanti, se çfarë gjëra janë duke ndodhur brenda programit. Pra, duke përdorur printf është shumë e dobishme kur ne duam për të identifikuar fushat specifike të një program që kanë disa bug. Por ajo gjithashtu bëhet e lodhshme, pas një kohë. Në këtë rast, ky është një Programi relativisht e thjeshtë me vetëm një ose dy variablave. Dhe kjo bëhet shumë e lehtë për ne për të shtypura nga vlera e këtyre variablave në kontekstin e programit më të gjerë. Por ne mund të ketë një tjetër program që ka shumë variabla. Dhe kjo nuk mund të jetë mjaft aq e lehtë për t'u përdorur printf në përpjekje për të vlerësuar se çfarë po ndodh për secilin prej këtyre variablave si programi është ekzekutuar. Ka një program që ekziston quajtur një program Rregullues. Në këtë rast, ajo që ne do të Përdorimi është debugger GNU, ose Gdb, që na lejon për të inspektuar të brendshme punimet e një programi në një shumë më të mënyrë të detajuar. Ne fakt mund të ekzekutojë GDB nga vija e komandës këtu thjesht duke shtypur GDB dhe Komanda që ne duam të korrigjoj. Në këtë rast, numërimin. Tani, në këtë rast, ne mund të shohim se ajo na sjell në një të shpejtë që thotë GDB. Dhe ne mund të vërtetë të ekzekutojë komandat të GDB që në fakt të fillojë ekzekutimin e program, të ndaluar atë në pika të caktuara, vlerësimin e variablave dhe inspektojë variablat që ekzistojnë në shtetin e programit në atë moment të veçantë, dhe kështu me radhë e kështu me radhë. Ajo siguron një shumë të pushtetit për ne. Por kjo ndodh vetëm në mënyrë që IDE CS50 edhe ofron një GUI ose një përdorues ndërfaqe për GDB se na lejon për të bërë këtë pa pasur nevojë ndërfaqe command line whatsoever apo fare madje. Mënyra se si unë mund të hyni në atë është duke përdorur butonin debug në krye të IDE CS50. Tani në të kaluarën, ajo që ne kemi shihet është se ne përdorim komandën line për të përpilojnë dhe pastaj të drejtuar një program. Butoni debug bën të dy këto hapa. Por ajo gjithashtu do të sjellë deri tab Rregullues më shumë të drejtë që na lejon për të inspektuar një shumëllojshmëri i pronave të programit siç është ekzekutuar. Nëse unë klikoni debug, në këtë rast, ajo do të sjellë deri një skedë të re në tastierë dritare në fund fare. Dhe ju mund të shihni se kjo skedë ka disa informacione në shumë të lartë. Dhe ne kryesisht mund ta injorojë këtë. Por një nga gjërat që ne duam në njoftim është se ajo nxjerr e njëjta gjë që kemi do të marrë në qoftë se ne u përpoq për të kandiduar të bërë në programi C në dritaren e terminalit. Këtu, ne mund të shohim se është duke tingëllimë, dhe ajo ka një shumëllojshmëri të flamujve, dhe ajo është e përpiluar dosjen tonë count.c, e cila ishte tab zgjedhur në atë kohë që unë goditi debug. Pra, kjo është shumë e dobishme për shkak se tani duke përdorur këtë buton debug, ne të njëjtën kohë mund të hartojnë dhe pastaj ekzekutuar programin që ne në fakt duan për të kandiduar. Një nga flamujve që është i rëndësishëm, në këtë rast, ne kemi qenë në fakt duke përdorur për kohë të gjatë por edhe vetëm bëri disa dorë duke përshëndetur [e padëgjueshme], e cila është kjo një e drejtë këtu. Në tingëllim, ajo thotë -ggdb3. Në këtë rast, ajo që ne jemi thënë tingëllim, përpilues tonë, është se ne duam të hartojnë programin tonë. Por gjithashtu të sigurojë se çfarë janë quajtur informacion simbol në mënyrë që përpiluesit aktualisht ka qasje në një shumë e informacionit themelor përmbante brenda programit. Më konkretisht, numri e funksioneve që kam, emrat e këtyre funksioneve, variablat, tipet se këto variabla janë, dhe një shumëllojshmëri gjëra të tjera që ndihmojnë Rregullues të kryer veprimtarinë e saj. Tani ka diçka tjetër kjo është e rëndësishme të përmendet kur ne jemi duke diskutuar drejtimin nje program ne kete menyre. Vini re se ajo ka në fakt solli një skedë të re në tonë tastierë përgjatë poshtme. Ne nuk kemi për të bashkëvepruar drejtpërdrejt me dritaren e terminalit. Por kjo skedë të re është në fakt një dritare terminali. Ajo thjesht është specifik për drejtimin program që kemi krijuar. Vini re se në fund, në kombinim me disa dalje duke tingëllimë përpilues dhe GDB, të cilat ne mund të masë të madhe të injorojë, ai në fakt tregon prodhimin e programi ynë në fund fare. Tani është e rëndësishme që të kuptojnë se kjo dritare një fakt do të ju tregojnë Prodhimi nga programi juaj por gjithashtu mund të pranojë të dhëna për këtë program, si edhe. Kështu njoftim që thotë se ju lutem shkruani një numër, e cila është e njëjta prodhimi që kemi pasur kishte në dritaren e terminalit para. Por është e paraqitur tani në këtë skedë të re. Unë mund të dhëna një numër. Dhe kjo do të në fakt funksion si ne presim duke na treguar debug tonë, prodhimi, prodhimi që mund të jetë buggy, siç e kam parë më parë. Dhe në fund të fund, atë në fakt ka disa dalje të tjera nga BPV-së vetëm duke thënë se ky program ka përfunduar. Tani si ju pa në këtë drejtuar veçanti nëpërmjet, kjo nuk ishte veçanërisht dobishme sepse edhe edhe pse kishim ardhur menu Rregullues lart, kjo ishte ende një program running. Në asnjë moment e bëri atë të vërtetë pauzë ekzekutimin për ne të jetë në gjendje për të inspektuar të gjitha ndryshoret përmbante brenda. Ka diçka tjetër që ne duhet të bëjmë në mënyrë që për të marrë GDB të njohin se ne duam për pushim ekzekutimin e programit dhe jo vetëm të lejojë që ajo të vazhdojë normalisht si ne do në çdo rast tjetër. Në mënyrë që të pauzë ekzekutimin, në një linjë të caktuar, ne kemi nevojë për të krijuar atë që është quhet një pikë pushim. Dhe një pikë pushim është krijuar shumë lehtë në këtë CS50 IDE duke marrë miun tuaj dhe duke klikuar direkt në të majtë e disa numër specifik linjë. Sapo kam bërë këtë, një kuqe dot duket, e cila tregon se kjo linjë është tani një pikë pushim. Dhe herën tjetër që unë të drejtuar GDB, atë do të ndalojë ekzekutimin në atë pikë pushim kur ajo të arrijë në atë linjë të kodit. Tani kjo është një e rëndësishme gjë për të realizuar se kjo nuk është domosdoshmërisht rast se çdo linjë e kodit në fakt është i arritshëm. Nëse unë do të krijojë një funksion këtu, për f-- example-- pavlefshëm dhe vetëm të bëjë një linjë të shtypura here-- përshëndetje world-- në qoftë se unë nuk e quaj këtë funksion, ajo do të jetë rasti që, në qoftë se kam vendosur një pikë pushim këtu, funksioni nuk do të quhet. Dhe për këtë arsye, kjo pikë e veçantë pushim kurrë nuk do të të bëj një pauzë në fakt ekzekutimi i programit. Pra, le të thonë se unë krijoj saktë një pikë pushim në një linjë e kodit që në të vërtetë do të ekzekutohet. Tani, në këtë rast, kjo është Linja e parë në funksion kryesor. Pra, ajo me siguri do të jetë rasti që, sa më shpejt që unë të fillojë ekzekutimin, vija e parë do të arrihet. GDB do të bëj një pauzë ekzekutimin. Dhe atëherë, unë do të jetë në gjendje të ndërveprojnë me Rregullues. Ju mund të vendosni linja të shumta si breakpoints, në qoftë se ju do të donte. Ne gjithashtu mund të krijojë një linjë të lart këtu në këtë segment të kodit që kurrë nuk do të arrihet. Dhe ne mund të rregulloni një më poshtë. Arsyeja që ne do duam të bëjmë këtë, ne do të shkojnë në pak më shumë detaje në një moment të vetëm. Pra tani për tani, më lejoni vetëm disable Këto pika të tjera pushim kështu që ne mund të shikojmë se çfarë ndodh kur unë kam një pushim të vetme pikë në programin tim. Unë kam bërë disa ndryshimet në këtë program. Kështu që kam nevojë për të shpëtuar atë. Unë do të klikoni debug në mënyrë që unë mund të të fillojë hartimin dhe pastaj Ekzekutimi i Rregullues. Ne do të shohim se, pas momenteve, të Linja që kemi zgjedhur si pushim Pika është theksuar në të verdhë. Ne gjithashtu mund të vëreni se në të drejtën e sipërme në panelin debug se ikona pauzë është kthyer në një ikonë të vogël të luajë. Kjo do të thotë se ne kemi pauzë ekzekutimit, në këtë rast të veçantë. Dhe goditur butonin Play do të të na lejojë të rifillojë ekzekutimin në atë pikë të veçantë. Vini re se ka disa të tjera butonat në dispozicion në këtë panel debug, gjithashtu. Hap mbi të, e cila lejon mua që të ekzekutuar se një linjë e kodit dhe hap mbi të atë vijë sa më një tjetër, i cili, në këtë rast, do të thotë se të printf Deklarata është ekzekutuar. Dhe kjo pastaj do të të bëj një pauzë Ekzekutimi on line 13, si kaq. Dhe ka edhe një hap në funksion, e cila është e dobishme në qoftë se unë kam krijuar të tjera Funksionet e gjetkë në kodin burimor. Dhe unë dua të futemi në ato funksione dhe jo ekzekutuar atë funksion si një e tërë. Por ne do të shohim më shumë në hapin në funksion në një moment të vetëm. Tani vini re disa gjëra të tjera që në fakt ekzistojnë brenda këtij paneli debug. Ne kemi këtë panel quajtur quajnë rafte, e cila na tregon ku pikërisht ne jemi. Në këtë rast, ne jemi brenda e funksionit kryesor. Script ynë është quajtur count.c. Dhe ne të ndodhë të jetë në line 13, kolona njëra, e cila është pikërisht ajo që rajoni theksuar e kodit burim tregon, po ashtu. Tani vini re se kjo gjithashtu tregon nën seksionin lokal ndryshueshme të gjithë nga variablat që ekzistojnë brenda këtij funksioni. Është e rëndësishme të theksohet se të gjithë variablat do të shfaqet në këtë variabël lokale Seksioni brenda një funksion, edhe para se ata janë të përcaktuara. Ne mund të shohim këtu se ne kemi një ndryshore quajtur num, ka një vlerë të paracaktuar prej 0, dhe kjo është e tipit int. Tani para se ne fakt nisja të gjitha këto variabla, ne nuk jemi domosdoshmërisht garantuara për të parë një vlerë prej 0. Dhe në varësi të ekzekutimeve të tjera që kanë kryer dhe gjendja e kujtesës tuaj, kur ju në të vërtetë të drejtuar këtë program, ju mund të gjeni se ju nuk shoh vlerat e 0 dhe, në vend të kësaj, disa numra të tjerë të çmendur. Por mos u bëni merak për këtë. Kjo nuk do të jenë të rëndësishme deri ju në fakt nisja vlerën. Tani, në këtë rast, ne mund të shohim se Unë e kam zbatuar disa rezultate. Dhe unë jam, tani, ndaluar ekzekutimin. Por në këtë rast, çfarë Unë me të vërtetë dua të bëj është tani hap mbi këtë linjë e kodit në mënyrë që unë mund të vërtetë query përdorues për atë që int ne duam të përdorim në programin tonë. Tani, në këtë rast, kur I goditi hap mbi, njoftimin se Ndalo ose më mirë Resume Butoni ka ndryshuar në këtë butonin pushim sepse ky kod është në të vërtetë ekzekutimin. Çfarë po ndodh tani është se ajo është duke pritur për ne për të dhëna disa informacione si ne mund të shohim nga teksti tonë të prodhimit në fund shumë. Deri tani, kjo është Nuk ndaluar në fakt, Edhe pse ajo, lloj, duket të jetë për shkak se asgjë nuk po ndodh. Por kjo ndodh vetëm në mënyrë që në rasti im specifik on line 13, Unë jam duke pritur për të dhëna përdoruesi. Dhe kështu GDB nuk është në gjendje për të inspektuar një program si ajo po kandidon. Tani herën tjetër që unë të hyjë disa input-- kështu që unë do të hyjë në atë numër 5, siç e kemi parë në past-- hit Kthimi, dhe ne vini re se, menjëherë, pushimeve GDB dhe, përsëri, thekson linjë tjetër. Por vini re se tani, si një rezultat i tona inputting një vlerë, ne kemi përditësuar këtë vlerë brenda e variablave tona lokale, të cilat është shumë e dobishme të dinë saktësisht çka ky numër ishte në kujtesë. Tani unë mund të lejojë ky program për të vazhduar duke luajtur deri në fund të ekzekutimit të tij duke goditur Resume. Ne mund të shohim se shumë shpejt bën programi përfundojë ekzekutimin me e njëjtë prodhimi që kishte para, debugger mbyllet, dhe tani ky program ka ndaluar plotësisht. Unë tregojnë se vetëm për Qëllimet e parë atë ndodh kur ne fakt goditi Resume. Por ne fakt jemi duke shkuar për doni të shkoni përsëri në këtë program kështu që ne mund të përpiqemi për të korrigjoj pikërisht atë që po ndodh. Tani që unë jam duke përdorur Rregullues, unë mund Nuk duhet këto deklarata debug printf. Kështu që unë mund të hiqni ato si unë do të bëj tani vetëm për të shkuar përsëri në kodin tonë të thjeshtë se kemi pasur një moment më parë. Tani, kur unë të shpëtuar programit dhe ekzekutuar atë, ajo do të, përsëri, të shkojnë në atë fillestar pikën që kam pasur on line 11 pushim. Dhe unë do të jetë në gjendje për të inspektuar Variablat e mi si unë dua të bëj. Kjo ndodh pikërisht kështu që ky pjesë nuk është shumë interesante, Dhe unë e di se unë jam duke shkuar për të shtypur këtë deklaratë. Ju lutem shkruani një numër. Dhe pastaj, unë e di se unë jam duke shkuar të kërkojë nga shfrytëzuesi për atë numër të plotë. Pra, ndoshta, unë në fakt duan të lëvizin tim Point Break pak më poshtë. Ju mund të hiqni pika pushim duke klikuar, përsëri, direkt në të majtë të atij numri linjës. Që dot të kuqe do të zhduket, duke treguar që kjo pikë pushim është shkuar tani. Tani, në këtë rast, ekzekutimi ka qenë i ndaluar. Dhe kështu që nuk është në të vërtetë do të rinisë në këtë rast të veçantë. Por unë mund të vënë një pushim pika pak më vonë. Dhe kur unë tani rinisë time kod, ajo do të rifillojë dhe të tregoj pika e atë pikë pushim. Përsëri, unë goditi Resume. A nuk duket si diçka që po ndodh. Por kjo është për shkak tim Kodi është duke pritur për të dhëna. Unë do të hyjë në një numër 5, hit Enter, dhe tani Pika tjetër pushim do të jetë hit. Tani, në këtë rast, kjo është vija e kodit se, më parë, ne e dinim ka ndodhur të jetë buggy. Pra, le të vlerësojnë se çfarë ndodh në këtë pikë të veçantë në kohë. Kur një vijë është e theksuar, kjo Linja ende nuk është ekzekutuar. Pra, në këtë rast, ne mund të shohim që unë kam një numër, i cili Unë kam një numër të plotë të quajtur num që ka një vlerë 5. Dhe unë jam duke shkuar për të interpretojë disa math në këtë numër. Nëse unë hap mbi atë, ne mund të vini re se vlera për num ka ndryshuar në përputhje me aritmetike që ne kemi bërë në të vërtetë. Dhe tani që ne jemi brenda këtë për lak apo tani që për lak në vetvete është theksuar, ne shohim se ne kemi një të ri variabël i kërkova që do të përdoret në atë që për lak. Tani mos harroni para se unë përmendur se ndonjëherë ju jeni do të shohim një lloj të çmendur Numrat si default para atij numri apo se është e ndryshueshme në fakt nisur. Ne mund të shohim se pikërisht këtu në këtë variabël quajtur I, e cila nuk ka ende nuk është nisur në kohën e theksuar. Por ne mund të shohim se ajo ka disa numrin se ne nuk do të vërtetë të presin. Eshte ne rregull. Mos u shqetësoni në lidhje me të sepse ne kemi në fakt nuk nisur këtë numër deri sa unë hap mbi këtë linjë dhe vlerës Unë ka nisur me vlerën 1. Në mënyrë për të parë se kjo është në fakt rasti, le të hap mbi. Ne tani mund të shohim se kjo Linja është ekzekutuar. Dhe ne jemi tani duke theksuar kjo linjë printf. Dhe ne tani mund të shohim se si vlerat tona i I dhe 3 kanë ndryshuar me kalimin e kohës. Kjo është shumë e dobishme për të bërë, në fakt, është që të hap mbi linjat në mënyrë të përsëritur. Dhe ju mund të gjeni se çfarë në fakt ndodh brenda për lak tuaj dhe se çfarë ndodh me variabla brenda e që për lak si ajo ekzekutimit të programit ndodh një hap në një kohë. Tani në këtë pikë, unë rritur gjatë vetëm sa që unë tani jam në përfundim të programit tim. Nëse unë hap mbi atë, ajo do të në fakt të pushojë ekzekutimin siç e kemi parë në të kaluarën. Më lejoni të rinisni kjo, përsëri, kështu që që unë mund të nxjerr diçka tjetër jashtë, gjithashtu. Në këtë rast, ajo është tani duke i kërkuar mua, përsëri, për një numër, i cili Unë do të, përsëri, të hyjë. Por këtë herë, unë jam duke shkuar për të hyrë në një numër i madh mënyrë që për lak do të iterate më shumë herë. Në këtë rast, unë jam duke shkuar për të hyrë në një vlerë prej 11. Tani përsëri, sepse unë do të vendos një pikë pushim në linjë 15, ajo do të nxjerrë në pah këtë linjë. Ne mund të shohim se tonë Numri 11 është i saktë përfaqësuar në variablat tona lokale. Shkelën mbi atë, ne mund të tani të shikojnë se çfarë ndodh me vlerën tonë të i si ne të vazhdojë brenda e kjo për lak. Ajo merr incremented çdo herë kemi arritur në krye të se për lak. Tani një nga gjërat që e fuqisë të jenë të dobishme për të bërë gjatë ekzekutimit i këtij programi është për mua që në fakt ndryshojë variablave mes lumi për të parë çfarë ndodh me programin tim. Në këtë rast, unë mund të vërtetë klikoni dy herë vlerën. Vini re se të bëhet një fushë teksti. Tani unë mund të hyjë ndryshme vlerësojnë krejt për të parë se si programi im sillet kur unë kam ndryshuar këtë variabël. Tani, në këtë rast, e ndryshueshme Unë tani përmban vlerën 10. Por programi është ende ndaluar në ekzekutim. Kur unë hap gjatë, unë shoh se Unë vlerë, që kam hyrë si 10, është jo më të madhe se vlera e num, që menjëherë shkakton për lak për të ndaluar ekzekutimin. Tani që nuk është e vetmja arsyeja pse ju do të dëshironi të modifikoni ndryshueshme në vend. Ju në fakt mund të dëshironi në përpjekje për të ndryshuar atë në mënyrë që ju mund të vazhdojë ekzekutimi i një lak ose në mënyrë që ju mund të modifikoj disa vlera para tij arrin një grup të veçantë të aritmetikës se ju jeni gati për të kryer. Pra, tani që ne në fakt të ndryshojë Vlera e unë si programi u ekzekutimin, ai shkaktoi për lak për të lënë para kohe për shkak, të gjithë një e papritur, unë ka ndodhur të jetë më e madhe se vlera e e num, do të thotë se ajo për lak e nevojshme nuk do të ekzekutohet. Më tej, ajo ka ndodhur të jetë rast se kemi ndryshuar vlerën e I kur u theksua linja 17, e cila ishte pika në kohë se për ekzekutim loop ishte në fakt duke u vlerësuar. Po të kisha ndryshuar vlerën e Unë në një linjë të ndryshme, të themi 19, ne do të kemi parë ndryshe Sjellja sepse linja 19 do kanë ekzekutuar para lak kusht është rivlerësuar. Tani në këtë pikë, unë jam, përsëri, në fund të këtij programi. Dhe unë mund të lejojë që kjo të vazhdojë për lejojë që programi im për të lënë të natyrshme. Por ka disa gjëra që janë të rëndësishme për të marrë larg nga ky diskutim të veçantë. Ju duhet për të vlerësuar supozimet tuaja për mënyrën se si kodi duhet të sillet. Çdo herë që ju mendoni se disa pjesë Kodi i dini ndodh për të punuar, që mund të jetë një flamur të kuq për të shkuar mbrapa dhe të vlerësojë, dhe të jetë i sigurt se supozimin tuaj të se si kodi është operativ është në fakt e vërtetë se si është shprehur në kodin tuaj burim. Por edhe më shumë për pikë ishte, kur ne jemi duke përdorur Rregullues, ju mund të vënë breakpoints në linja të ndryshme të kodit, e cila do të shkaktojë Rregullues të pauzë ekzekutimin në secilin nga këto linja kështu që ju mund të vlerësoni kujtesës ose madje edhe të ndryshoni atë në vend. Dhe përsëri, mos harroni se ju mund të krijuar breakpoints të shumta në mënyrë që të mund të rifillojë ekzekutimin, kaloni mbi pjesë të mëdha të kodit, dhe kjo do të të bëj një pauzë automatikisht në pikën e ardhshme pushim. Nuk është në fakt më të avancuar tiparet e Rregullues, po ashtu. Por ne do të duhet t'i referohemi ju për disa video pasuese në mënyrë që me të vërtetë të vë në lojë përveç si për të përdorur këto funksione të veçanta. Tani për tani, ju falenderoj shumë për të shikuar. Dhe debugging mirë fat.