[? DAN ARMADARAS:?] Hi, Es esmu [? Dan Armadaras?]. Šodien mēs esam gatavojas būt meklē atkļūdošanu. Ne tikai mēs gatavojamies runāt par dažiem paņēmieniem, bet arī mēs ejam apskatīt dažas no pazīmēm, kas ietvaros CS50 IDE, kas ļautu viegli atkļūdot programmas. Tikai viens piemērs kaut kas var noiet greizi un tas ir tiešām kaut kas ka mēs esam jau redzējis. Šajā gadījumā tas ir C programma kas pieņem vesels skaitlis no lietotāja, dala to ar divi, un sniedz izejas atpakaļ uz lietotāja. Tagad no tā, ko mēs esam redzējuši agrāk lekcijās, mēs zinām, ka tas faktiski izraisīt īpašu veidu dalījumu problēmas kad mums ir nepāra numuriem. Konkrēti, mēs tikai mest prom kaut kas aiz komata. Tagad mēs zinām, ka tas notiek, ir tas gadījums. Un, ja mēs palaist to, mēs varam apstiprināt , mūsu aizdomas, pirmkārt, apkopojot. Un tad, palaižot un ievadot nepāra numuru. Tas nav nekas jauns. Bet tas ir faktiski piemērs bug ka var pastāvēt plašākas programmas kas kļūst grūtāk izsekot. Pat ja mēs zinām, kāda ir problēma ir patiesā lietas būtība varētu mēģināt identificēt īpaši, ja kļūda, Nosakot, kas šo problēmu ir, un pēc tam nosakot to. Tā nodrošina šo kā piemēru par to, kas varētu būt kaut kas ka mēs jau zinām, bet var būt aprakti citās elementiem kodu. Tātad atverot šo citu avotu kods fails kā piemēru, šī nodaļa problēma tagad daļa no lielāka programmu. Vēl varētu būt nedaudz bit izdomāts, un mēs varētu viegli identificēt, jo īpaši jo mēs esam tikai apspriežam šo. Bet mēs varam izrēķināt, ka šis Problēma var pastāvēt plašākā mērogā. Ja es sastādīt šo un tagad palaist to, ievadiet nepāra numuru, mēs varam redzēt, ka mēs nesaņem precīzi produkcija, ko mēs varētu sagaidīt. Šajā konkrētajā gadījumā, mēs varētu teikt, ka mēs vēlaties saskaitīt visus numurus no viena līdz pat dažiem konkrēto numuru. Un mēs varam redzēt, ka mēs ir dažādi jautājumi šeit, ja mēs esam outputting, vienkārši, 0 un 1, ja mēs piedāvājam ievadi 5. Tātad mēs jau zinām, ka tur ir problēma šeit. Bet mēs nevar zināt precīzi kur šis jautājums patiešām pastāv. Tagad viens no veidiem, kas mēs varam mēģināt noteikt šo ir kaut kas, mēs esam jau ir ieviesti, lai. Mēs varam tikai izmantot to plašākā mērogā. On line 14, mums ir Tas printf funkciju, kas ļauj izdrukāt valsti dažādu informācijas daļas. Un tas ir kaut kas jums būtu jāpiesaista jūsu programmā mēģināt izdomāt, ko tieši ir notiek dažādos rindas kodu. Tātad, pat tad, ja tā nav Galīgā produkcija, ka mēs faktiski vēlas ražot no Šī programma, mēs joprojām varētu būt dažas debug pārskatus, ja mēs var mēģināt izdomāt ko tieši notiek iekšpusē mūsu kodu. Tātad šajā gadījumā, es gribu printf ar atkļūdošanas tag. Šajā gadījumā, tas ir tikai atkļūdot string ka es esmu up-liekot, lai tā kļūst ļoti skaidri produkcijas manu kodu kas tas ir, ka es gribu parādīt. Un izejas šeit skaits ka mēs esam aprēķināts. Šajā gadījumā, es varētu gribu zināt precīzi kas notiek pirms un pēc kāda konkrēta skaitļošanai. Tāpēc es varētu izmantot printf pirms un pēc šī koda rindu. Šajā gadījumā, es varētu pat padara to mazliet vairāk skaidrs pasakot debug pirms un atkļūdot pēc tik ka man nav sajaukt ar sevi vairākas līnijas, kas izskatās identiski. Tagad, ja mēs recompile šo un palaist tas, ievadiet numuru, piemēram, pieciem atkal, mēs varam redzēt, ka mums ir tagad produkcija pirms un pēc un konstatēt, ka mēs neesam darījuši skaidra sadalīšana vai skaidrs, kam skaita ka mēs patiešām vēlamies darīt. Tagad šajā gadījumā, tas ir nav īsti skaidra izejas. Tas nav īsti skaidrs, ka iznākums mēs gribam no šo konkrēto programmu. Un tas ir, atkal A mazliet izdomāts. Bet, iespējams, viena no lietām, kas mēs varētu darīt, ja specifikācija teica ka mēs vēlamies dalīt šo, 2 un pievienot 1-- tik citiem vārdiem sakot, mēs vēlamies, lai noapaļot up-- tad mēs varētu zināt, ka mēs varētu darīt, ka konkrētu lietu, kas šajā gadījumā. Tagad šeit mēs zinām, ka mēs būsim var pievienot 1 līdz mūsu uz pusi numuru. Pieņemsim recompile šis un apstiprina, ka šis uzvedas tā, ka mēs vēlamies. Mēs varam redzēt, ka tagad pirms ņemot, mums ir numurs 5. Pēc tam, mums ir numurs 3, kas saskaņā ar mūsu specifikācijai, ir tas, ko mēs vēlējāmies darīt. Bet, ja mēs skatāmies uz izeja šeit, mēs varam redzēt, ka mēs varētu būt vēl viens bug kopumā, kas ir ka mēs sākam mūsu skaitu no 0. Tagad atkal, tas ir kaut kas ka mēs esam redzējuši iepriekš un mēs varam noteikt diezgan viegli. Bet šajā gadījumā, mēs bija arī labā izmantot printf paziņojumu tieši iekšpusē cilpa zināt precīzi, kur ka kļūda bija noticis. Tātad printf apgalvojumi ir ļoti noderīgi, palīdzot jums noteikt, kur, Tieši jūsu avota kodu, īpašs kļūda notiek. Un tas ir arī svarīgi apzināties ka, jo mēs esam rakstot kodu, mēs varētu būt pieņēmumus par valsts programmas. Vai mēs varētu būt pieņēmumus par to, kas ir daļa no programmas ir faktiski pareiza vai nepareiza, kad vēlāk kā mēs veidojam par šo programmu un padarīt to daļa no sarežģīts un lielāks programma ka mēs saprotam, ka daži aspekts no tā ir faktiski buggy. Izmantojot printf tiešām var palīdzēt sašaurināt un identificēt reģioni programmu, kas nedrīkst būt uzvedas tieši tā, ka mēs gaidīt, pamatojoties uz mūsu pieņēmumiem. Bet tur ir citi instrumenti pieejami, kā arī, kas ļauj mums mēģināt izdomāt , kur kļūda notiek Kā arī, konkrētāk, ko lietas kas notiek iekšpusē programmas. Tātad, izmantojot printf ir ļoti noderīgi, ja mēs gribam lai noteiktu konkrētas jomas programma, kas ir dažas bug. Bet tas arī kļūst garlaicīgs pēc brītiņa. Šajā gadījumā, tas ir salīdzinoši vienkārša programma ar vienu vai diviem mainīgajiem. Un tas kļūst ļoti viegli, lai mēs izdrukāt vērtību šiem mainīgajiem saistībā ar lielāku programmas. Bet mēs varētu būt atšķirīgs Programma, kas ir daudz mainīgie. Un tas nevar būt pilnīgi tik viegli lietot printf lai mēģinātu novērtēt to, kas notiek uz katra no minētajiem mainīgajiem kā Programmas izpildes. Tur ir programma, kas pastāv sauc atkļūdotājs programma. Šajā gadījumā viens, ka mēs izmantošana ir GNU atkļūdotājs, vai GDB, kas ļauj mums pārbaudīt iekšējais darbības principiem programma, daudz vairāk detalizēts veidā. Mēs faktiski varam izpildīt GDB no komandrindas šeit, vienkārši ierakstot GDB un komanda, kas mēs gribam, lai atkļūdot. Šajā gadījumā, skaits. Tagad šajā gadījumā, mēs varam redzēt, ka tas mūs uz uzvedni, kas saka GDB. Un mēs varam faktiski izpildīt komandas GDB faktiski sākt izpildi programma, pārtraukt to noteiktos punktos, izvērtē mainīgos un pārbaudīt mainīgos, kas pastāv programmas valstī tajā brīdī, un tā tālāk, un tā tālāk. Tas nodrošina daudz jaudas, lai mums. Bet tas tikai tā notiek, ka CS50 IDE arī nodrošina GUI vai lietotājs interfeiss GDB ka ļauj mums to darīt bez nepieciešamības komandrindas saskarne whatsoever vai vispār pat. Tā, ka es varu piekļūt ka ir, izmantojot pogu atkļūdošanas pašā augšā CS50 IDE. Tagad pagātnē, kas mums ir redzams, ir tas, ka mēs izmantojam komandu line, lai apkopotu un pēc tam palaist programmu. Atkļūdošanas poga dara abiem šiem soļiem. Bet tas arī būs audzināt atkļūdotājs tab par tālu pa labi kas ļauj mums pārbaudīt dažādus no īpašību programmas kā tas ir izpildes. Ja es noklikšķiniet debug, šajā gadījumā, tas būs audzināt jauns tab konsole logu pašā apakšā. Un jūs varat redzēt, ka tas ir cilnes kādu informāciju pašā augšā. Un mēs varam lielā mērā ignorēt. Bet viena no lietām ka mēs vēlamies, lai paziņojuma ir tas, ka tā rezultāti tas pats, kas mums varētu iegūt, ja mēs mēģinājām palaist padarīt par C programma termināļa logā. Lūk, mēs varam redzēt, tas darbojas šķindēt, un tā ir dažādas karogiem, un tas ir apkopojot mūsu count.c failu, kas bija izvēlēts tab brīdī ka es hit debug. Tātad tas ir ļoti noderīgi, jo Tagad, izmantojot šo atkļūdot pogu, mēs varam vienlaicīgi sastādīt un pēc tam izpildīt programmu, ka mēs faktiski vēlas darboties. Viens no karogiem, kas ir svarīgs, šajā gadījumā, mēs esam patiesībā bijis, izmantojot visilgāk bet arī vienkārši darīju zināmu roku ilgviļņu [dzirdams], kas tas ir viens tieši šeit. In šķindēt, tā saka -ggdb3. Šajā gadījumā, kas esam stāsta šķindēt, mūsu kompilators, ir tas, ka mēs gribam, lai apkopotu mūsu programmu. Bet arī sniegt to, ko ir sauc simbols informācija tā, ka kompilators faktiski ir piekļuve uz daudz pamatā esošo informāciju ietvertas programmas ietvaros. Precīzāk, to skaits Funkciju, kas man ir, nosaukumi šīm funkcijām, mainīgie, to veidi ka šie mainīgie ir, un šķirni citas lietas, kas palīdz atkļūdotājs veiktu savu darbību. Tagad tur ir kaut kas cits tas ir svarīgi pieminēt kad mēs apspriežam skriešanu programma, šādā veidā. Ievērojiet, ka tas ir faktiski audzināti jaunu cilni mūsu konsole pa dibenu. Mums vairs nav, lai mijiedarbotos tieši ar termināļa logu. Bet šī jaunā tab ir faktiski termināla logu. Tas vienkārši ir raksturīgi darbībai programma, ka mēs esam radījuši. Paziņojums, ka apakšā, kas kombinācija ar kādu produkciju ko šķindēt kompilators un gdb, ko mēs varam lielā mērā ignorēt, tas faktiski parāda produkciju Mūsu programma pašā apakšā. Tagad tas ir svarīgi apzināties ka šis viens logs faktiski parādīs izeja no jūsu programmā bet arī var pieņemt ieguldījumu par šo programmu, kā arī. Tātad paziņojums, ka saka ievadiet numuru, kas ir tas pats izejas ka mums bija bija termināļa logā pirms. Bet tas tagad redzams šajā jaunā cilnē. Man varat ievadīt numuru. Un tas tiešām funkcija kā mēs sagaidām parādot mums mūsu debug, produkciju, produkcija, kas varētu būt buggy, kā mēs esam redzējuši iepriekš. Un pašā apakšā, to faktiski ir dažas papildu produkciju no IKP, tikai saku, ka šī programma ir pabeigta. Tagad, kā redzējāt šajā īpaši palaist cauri, tas nebija īpaši noderīgi, jo pat lai gan mums bija atkļūdotājs izvēlne nākt up, tas bija vēl darbojas programma. Nevienā brīdī darīja faktiski pauzes izpildi par mums lai varētu pārbaudīt visus mainīgie ietvertas. Tur ir kaut kas cits kas mums ir jādara, lai nokļūt gdb atzīt, ka mēs gribam lai apturētu programmas izpildi un ne tikai ļaut tam turpināt parasti kā mēs darītu jebkurā citā gadījumā. Lai apturētu izpildi, kādā konkrētā līnijā, mums ir nepieciešams, lai radītu to, kas ir sauc par lūzuma punkts. Un lūzuma punkts ir ļoti viegli radīt šajā CS50 IDE, ņemot peli un uzklikšķinot tieši pa kreisi par kādu konkrētu līnijas numuru. Kad es to izdarītu, sarkans dot Šķiet, kas norāda ka šī līnija tagad ir lūzuma punkts. Un nākamreiz, ka es palaist gdb, to apstāsies izpildi šajā lūzuma punkts kad tas sasniedz šo rindiņu kodu. Tagad tas ir svarīgs lieta saprast ka tas nav obligāti lieta, ka katrs līnija koda ir faktiski pieejama. Ja es būtu izveidot funkciju šeit, lai example-- neesošu f-- un vienkārši darīt drukas līniju here-- sveiki world-- ja es nekad aicinu šo funkciju, tas būs gadījums, ka, ja es noteikti lūzuma punkts šeit, funkcija nekad netiks saukts. Un tādēļ šī īpaši lūzuma punkts nekad faktiski apturētu programmas izpildi. Tātad pieņemsim, ka es pareizi izveidot pārtraukums punkts uz kādu rindiņu kodu ka faktiski tiks izpildīts. Tagad šajā gadījumā, tas ir Pirmā līnija galvenā funkcija. Tātad tas noteikti būs gadījums ka, tiklīdz es sākt izpildi, Pati pirmā līnija tiks sasniegts. GDB būs apturētu izpildi. Un tad, es būs iespēja mijiedarbojas ar atkļūdotājs. Jūs varat uzstādīt vairākas rindas, kā robežkoncentrācija, ja jūs vēlētos. Mēs varam arī izveidot līniju uz augšu šeit šajā segmentā kodu kas nekad netiks sasniegts. Un mēs varam arī iestatīt vienu turpmāk. Iemesls, ka mēs būtu gribu darīt to mēs iedziļināties mazliet vairāk detail tikai brīdi. Tātad tagad, ļaujiet man vienkārši atslēgt šie papildu pārtraukuma punktus lai mēs varētu apskatīt, kas notiek kad man ir vienu pārtraukumu punkts manā programmā. Esmu dažus izmaiņas šajā programmā. Tāpēc man ir nepieciešams, lai saglabātu to. Es noklikšķiniet atkļūdot, lai es varu sāk apkopot un pēc tam izpilde atkļūdotājs. Mēs redzam, ka, pēc momentiem, kas line ka mēs izvēlējāmies kā pārtraukuma punkts ir iezīmēts dzeltenā krāsā. Mēs varam arī paziņojums, ka augšējā tiesības atkļūdošanas panelī ka pauzes ikona ir ieslēgts par maz spēlēšanas ikonu. Tas nozīmē, ka mums ir pauze izpilde, šajā konkrētajā gadījumā. Un dodas uz pogas Atskaņot būtu ļauj atsākt izpildi šajā konkrētajā brīdī. Ievērojiet, ka tur ir pāris citu pogas pieejams šajā atkļūdošanas panelī, arī. Soli pa, kas ļauj man izpildīt šo vienu rindiņu kodu un soli pār šo līniju uz blakus viens, kas, šajā gadījumā, nozīmētu, ka printf paziņojums tiek izpildīts. Un tas būs pēc tam pauze izpilde on line 13, piemēram, tā. Un tur ir arī solis par funkciju, kas ir noderīgi, ja esmu izveidojis otru funkcijas citur pirmkodu. Un es gribu, lai soli šīs funkcijas, nevis izpildīt šo funkciju kopumā. Bet mēs apskatīt vairāk pie solī par funkciju tikai brīdi. Tagad novērojat kādu citu lietu, kas faktiski eksistē šajā atkļūdošanas panelī. Mums ir tas panelis sauc zvaniet kaudze, kas mums rāda kur tieši mēs esam. Šajā gadījumā, mēs ir iekšā no galvenā funkcija. Mūsu skripts sauc count.c. Un mēs gadās būt līnija 13, viena kolonna, kas Tieši tas, ko uzsvēra reģions pirmkoda norāda, kā arī. Tagad ievēroju, ka tas arī parāda saskaņā ar vietējās mainīgo sadaļu visiem mainīgajiem lielumiem, kas pastāvēt šai funkcijai. Ir svarīgi atzīmēt, ka visi mainīgie lielumi parādīsies šīs vietējās mainīgais sadaļa ietvaros funkciju, pat pirms tie ir definēti. Mēs varam redzēt šeit, ka mums ir mainīgais sauc num, ir noklusējuma vērtība ir 0, un tas ir tipa int. Tagad, pirms mēs faktiski inicializētu visus šos mainīgos lielumus, mēs esam ne vienmēr garantēta, lai redzētu vērtību 0. Un atkarībā no citu nāvessoda izpildes ka esat veicis un stāvokli jūsu atmiņā, kad jūs faktiski palaist šo programmu, jūs varētu atrast, ka jums neredzu vērtības 0 un, tā vietā, daži citi traki numuri. Bet nav jāuztraucas par to. Tas nebūs būtiska līdz jūs tiešām sāktu vērtību. Tagad šajā gadījumā, mēs varam redzēt, ka Man ir veiktas dažas izejas. Un es esmu, tieši tagad, apturēta izpildi. Bet šajā gadījumā, kas Es tiešām gribu darīt ir tagad soli pa šo līniju koda tā, ka es faktiski var vaicājumu lietotājam šim int ka mēs vēlamies izmantot mūsu programmā. Tagad šajā gadījumā, kad Es hit soli pāri, paziņojot ka Pauze vai drīzāk Atsākt poga ir mainījusies līdz šim pauzes poga jo šis kods ir faktiski izpildes. Kas notiek tagad ir tā, ka tas ir gaida mūs ievadīt kādu informāciju kā mēs varam redzēt mūsu izejas tekstu pašā apakšā. Tāpēc tieši tagad, tas ir faktiski nav apturēta, Pat ja tas, veida, šķiet, būt tāpēc, ka nekas nenotiek. Bet tas tikai tā notiek, ka mans īpašais gadījums uz līnijas 13, Es gaidu lietotāja ievadi. Un tā GDB nevar pārbaudīt programma, kā tā darbojas. Tagad nākamreiz ka es ieiet daži input-- tāpēc es ņemšu ievadīt šo numuru 5, kā mēs esam redzējuši, past-- hit atpakaļ, un mēs paziņo, ka nekavējoties, GDB pauzes un, atkal, uzsver nākamo rindiņu. Bet paziņo, ka tagad, kā rezultāts mūsu ievadot vērtību, mēs esam atjauninājuši šo vērtību iekšā mūsu vietējās mainīgie, kas ir ļoti noderīgi zināt precīzi ko tas skaits bija atmiņā. Tagad es varu ļaut šo programmu, lai turpinātu spēlēt līdz beigām tā izpildes , trāpot CV. Mēs varam redzēt, ka ļoti ātri Vai programma apdare izpildes ar to pašu produkciju, ko mēs bija pirms, atkļūdotājs aizveras, un tagad šī programma ir apstājusies pilnībā. Man rāda, ka tikai par nolūki redzēt, kas notiek, kad mēs faktiski hit CV. Bet mēs tiešām gatavojamies vēlas doties atpakaļ uz šo programmu lai mēs varētu mēģināt atkļūdot Tieši to, kas notiek. Tagad, ka es esmu, izmantojot atkļūdotājs, es varētu nav nepieciešams šos debug printf paziņojumus. Tāpēc es varētu noņemt tos kā es darīšu tagad tikai, lai dotos atpakaļ uz mūsu vienkāršāku kodu ka mums bija pirms brīža. Tagad, kad es ietaupīt programmu un izpildīt to, tas, atkal, dodieties uz šo sākotnējo lūzuma punkts, kas man bija uz līnijas 11. Un es varēsiet pārbaudīt Mani mainīgie kā es gribu darīt. Tas tikai tā notiek, ka šis daļa nav ļoti interesanti, Un es zinu, ka es esmu gatavojas izdrukāt šo paziņojumu. Ievadiet numuru. Un tad, es zinu, ka es esmu gatavojas jautāt lietotājam šim skaitlim. Tāpēc varbūt, es tiešām gribu, lai pārvietotos manu lūzuma punkts mazliet tālāk uz leju. Jūs varat noņemt pārtraukuma punktus noklikšķinot, atkal, tieši pa kreisi no šīs līnijas numuru. Ka red dot pazudīs, norādot ka lūzuma punkts tagad ir pagājis. Tagad šajā gadījumā, izpilde ir apturēta. Un tā tas nav reāli gatavojas atsākt šajā konkrētajā gadījumā. Bet es varu noteikt pārtraukumu apakšpunkts mazliet vēlāk. Un, kad es tagad atsākt manu kods, tas atsāks un pateikt punkts šī lūzuma punkts. Atkal, es hit Atsākt. Nav šķist kaut kas notiek. Bet tas ir tāpēc, ka mana kods gaida ievadi. Es ievadiet numuru 5, hit Enter, un Tagad nākamais lūzuma punkts būs hit. Tagad šajā gadījumā, šī ir līnija koda ka, pirms, mēs zinājām gadījās būt buggy. Tātad pieņemsim novērtēt to, kas notiek šajā konkrētajā brīdī. Kad līnija ir iezīmēts, šis līnija vēl nav izpildīts. Tātad šajā gadījumā, mēs varam redzēt ka man ir vairāki, kas Man ir vesels skaitlis, ko sauc num kas ir vērtība 5. Un es esmu būs veicot daži math par šo numuru. Ja es soli pa to, ka mēs varam Ievērojiet, ka vērtību num ir mainījusies saskaņā ar aritmētika, ka mēs esam patiesībā darījuši. Un tagad, kad mēs esam iekšpusē šis cilpa vai tagad, kad cilpa pati par sevi ir iezīmēts, mēs redzam, ka mums ir jauna mainīgais sauc i ka tiks izmantoti ar to, ka, lai cilpas. Tagad atceros pirms minētā I minēja, ka reizēm jūs esat gatavojas redzēt kādu traks skaitļus kā noklusējuma pirms šo numuru vai arī, ka mainīgais ir faktiski inicializēts. Mēs varam redzēt, ka precīzi šeit šajā mainīgā sauc i, kas ir ne vēl nav inicializēts laikā izceļot. Bet mēs varam redzēt, ka tas ir dažas skaits ka mēs nebūtu reāli gaidīt. Tas ir labi. Neuztraucieties par to jo mums nav reāli inicializēts šo numuru, līdz I soli pa šo līniju un vērtību i ir inicializēts ar vērtību 1. Tātad, lai redzētu, ka tas ir faktiski gadījumā, pieņemsim soli pāri. Tagad mēs varam redzēt, ka līnija ir izpildīts. Un mēs tagad izceļot šis printf line. Un tagad mēs varam redzēt, kā mūsu vērtības I un 3 laika gaitā ir mainījusies. Tas ir ļoti noderīgi, lai darīt, patiesībā, ir soli pa līnijām atkārtoti. Un jūs varat atrast to, kas patiesībā notiek iekšpusē jūsu cilpas un kas notiek ar mainīgie, ka cilpas iekšpusē kā šīs programmas izpildi notiek vienu soli laikā. Tagad šajā brīdī, es pastiprināts nekā tikai pietiekami ka es tagad esmu beigās manā programmā. Ja es soli pa to, ka tas būs faktiski vairs izpildi kā mēs esam redzējuši iepriekš. Ļaujiet man restart tas, atkal, tāpēc ka es varētu norādīt kaut ko citu, kas, arī. Šajā gadījumā, tas ir tagad jautā man, atkal, par vairākiem, kas Es, atkal, ievadiet. Bet šoreiz, es esmu gatavojas ieiet lielāku skaitu tā, ka uz cilpas būs atkārtot vairākas reizes. Šajā gadījumā, es esmu, lai ievadītu vērtību 11. Tagad atkal, jo es gribētu noteikti lūzuma punkts pie līnijas 15, tas notiek, lai izceltu šo līniju. Mēs varam redzēt, ka mūsu skaitlis 11 ir pareizi pārstāvētas mūsu vietējo mainīgie. Kāpj pāri, ka mēs varam tagad skatīties, kas notiek ar mūsu vērtību i kā mēs turpināt iekšpusē šis cilpa. Tas izpaužas palielināts katru reizi, kad mēs sasniegtu aug ka par cilpa. Tagad viena no lietām, kas varētu lietderīgi darīt izpildes laikā Šīs programmas ir man faktiski mainīt mainīgie midstream lai redzētu kas notiek ar manu programmu. Šajā gadījumā, es faktiski var dubultklikšķi vērtību. Ievērojiet, ka tas kļūst par teksta laukā. Tagad es varu ieiet atšķirīgs vērtējam kopā lai redzētu, kā mana programma uzvedas kad es esmu mainījies šo mainīgo. Tagad šajā gadījumā mainīgais Es tagad satur vērtību 10. Bet programma ir vēl apturēta izpildē. Kad es soli vairāk, es redzu, ka vērtība i, kuru es ievadīta kā 10, ir ne lielāks par vērtību, num, kas tieši izraisa cilpa apstāties izpildes. Tagad tas nav vienīgais Iemesls, kāpēc jums būtu vēlaties mainīt mainīgo vietā. Jūs varētu tiešām vēlaties mēģināt pārveidot tā, lai ka jūs varat turpināt izpilde cilpu vai tā, ka jūs varat mainīt dažas vērtības, pirms tas sasniedz kādu īpašu komplektu aritmētisko ka jūs gatavojaties veikt. Tāpēc tagad, ka mēs faktiski mainīt I vērtība, jo programma tika izpildes, tas izraisīja cilpas atmest priekšlaicīgi, jo, visi pēkšņi, i gadījās būt lielāka nekā vērtība NUM, kas nozīmē, ka uz cilpas vairs nav nepieciešams, lai tiktu izpildīts. Turklāt tas noticis būt lieta, ka mēs mainīts vērtība i kad līnija 17 tika uzsvērts, kas bija brīdis ka par cilpu izpildei tika faktiski tiek vērtēti. Ja man bija mainījies vērtību Es par citu līniju, teiksim 19, mēs būtu redzējuši atšķirīgs uzvedība jo līnija 19 būtu ir izpildīti pirms cilpa nosacījums tika pārvērtēti. Tagad šajā brīdī, es esmu, atkal, beigās šīs programmas. Un es varu ļaut tam doties uz ļauj mana programma atmest dabiski. Bet tur ir pāris lietas ka ir svarīgi, lai paņemtu no šā konkrētā diskusijas. Jums ir nepieciešams, lai novērtētu Jūsu pašu pieņēmumi par to, kā kods būtu uzvedas. Jebkurā laikā jūs domājat, ka daži gabals Koda jūs zināt, kas notiek uz darbu, kas varētu būt sarkanais karogs iet atpakaļ un novērtēt, un būt pārliecināti, ka savu pieņēmumu kā šis kods darbojas ir tiešām taisnība, kā tas ir izteikts jūsu avota kodu. Bet vēl līdz punktam bija, kad mēs izmantojam atkļūdotājs, Jūs varat likt kontrolpunkti pie dažāda veida kods, kas radīs atkļūdotājs apturētu izpildi katrā no šīm līnijām lai jūs varētu novērtēt atmiņa vai pat mainīt to vietā. Un atkal, atcerieties, ka jūs varat izveidot vairākas kontrolpunkti, lai jūs var arī atsākt izpildi, izlaidiet pār lielu daļu no koda, un tas būs automātiski apturētu nākamajā lūzuma punkts. Tur tiešām vairāk uzlabotas iezīmes atkļūdotājs, kā arī. Bet mums nāksies nodot jums dažiem turpmākajiem video Lai tiešām ķircināt intervālu, kā izmantot šos īpašas funkcijas. Tagad, paldies ļoti daudz, lai skatītos. Un labu veiksmi debugging.