[? 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.