1 00:00:00,000 --> 00:00:00,309 2 00:00:00,309 --> 00:00:02,350 [? DAN ARMADARAS:?] Hi, Ek is [? Dan Armadaras?]. 3 00:00:02,350 --> 00:00:04,410 Vandag, ons gaan kyk na debugging. 4 00:00:04,410 --> 00:00:06,697 Nie net gaan ons praat oor 'n paar tegnieke, 5 00:00:06,697 --> 00:00:09,280 maar ook ons ​​gaan om te kyk na sommige van die funksies vervat 6 00:00:09,280 --> 00:00:14,170 binne die CS50 IDE wat toelaat jy maklik 'n program te ontfout. 7 00:00:14,170 --> 00:00:16,272 >> Net een voorbeeld van iets wat verkeerd kan gaan 8 00:00:16,272 --> 00:00:18,730 en dit is eintlik iets wat ons reeds gesien het nie. 9 00:00:18,730 --> 00:00:23,200 In hierdie geval, dit is 'n C program dat 'n heelgetal aanvaar van die gebruiker, 10 00:00:23,200 --> 00:00:27,580 verdeel dit deur twee, en bied die uitset terug na die gebruiker. 11 00:00:27,580 --> 00:00:30,610 En van wat ons gesien het vroeër in lesings, 12 00:00:30,610 --> 00:00:34,370 ons weet dat hierdie eintlik sal veroorsaak spesifieke tipes afdeling probleme 13 00:00:34,370 --> 00:00:35,860 wanneer ons onewe getalle. 14 00:00:35,860 --> 00:00:40,330 >> Spesifiek, sal ons net weggooi niks na die desimale punt. 15 00:00:40,330 --> 00:00:43,170 Nou, ons weet dat hierdie gebeur met die geval te wees. 16 00:00:43,170 --> 00:00:47,430 En as ons hardloop dit, kan ons bevestig ons vermoedens, eerste, deur die opstel. 17 00:00:47,430 --> 00:00:50,460 En dan, deur die loop en betree 'n onewe getal is. 18 00:00:50,460 --> 00:00:51,720 >> Dit is niks nuuts nie. 19 00:00:51,720 --> 00:00:54,490 Maar dit is eintlik 'n voorbeeld van 'n fout wat 20 00:00:54,490 --> 00:00:58,810 kan bestaan ​​binne 'n groter program dit word moeiliker om op te spoor. 21 00:00:58,810 --> 00:01:02,640 Selfs al weet ons wat die probleem is, die ware kern van die saak 22 00:01:02,640 --> 00:01:06,250 kan probeer om te identifiseer spesifiek waar die fout voorkom, 23 00:01:06,250 --> 00:01:09,750 die identifisering van wat die probleem is, en dan Ensiklopedie. 24 00:01:09,750 --> 00:01:14,400 So bied dit as 'n voorbeeld van wat kan iets 25 00:01:14,400 --> 00:01:19,030 dat ons weet reeds, maar kan begrawe word binne ander elemente van die kode. 26 00:01:19,030 --> 00:01:23,090 >> So opening van hierdie ander bron kode lêer as 'n voorbeeld, 27 00:01:23,090 --> 00:01:27,165 hierdie afdeling probleem is nou deel van 'n groter program. 28 00:01:27,165 --> 00:01:29,040 Tog kan 'n bietjie wees bietjie slinks, en ons 29 00:01:29,040 --> 00:01:31,076 kan maklik in staat wees om identifiseer nie, veral 30 00:01:31,076 --> 00:01:32,450 aangesien ons dit net bespreek. 31 00:01:32,450 --> 00:01:38,250 Maar ons kan uitvind dat dit probleem kan bestaan ​​op 'n groter skaal. 32 00:01:38,250 --> 00:01:45,450 >> As ek dit stel en nou hardloop dit, tik 'n vreemde nommer, 33 00:01:45,450 --> 00:01:49,816 ons kan sien dat ons nie presies kry die uitset dat ons kan verwag. 34 00:01:49,816 --> 00:01:51,690 In hierdie spesifieke geval, ons kan sê dat ons 35 00:01:51,690 --> 00:01:56,060 wil al die getalle te tel van een tot 'n paar spesifieke nommer. 36 00:01:56,060 --> 00:01:58,130 En ons kan sien dat ons het 'n verskeidenheid van kwessies 37 00:01:58,130 --> 00:02:03,880 hier as ons uitdruk, eenvoudig, 0 en 1 wanneer ons verskaf 'n inset van 5. 38 00:02:03,880 --> 00:02:07,380 >> So het ons reeds weet dat daar is hier 'n probleem. 39 00:02:07,380 --> 00:02:11,662 Maar ons kan nie presies weet waar hierdie kwessie werklik bestaan. 40 00:02:11,662 --> 00:02:13,620 Nou een van die maniere wat ons kan probeer om dit op te los 41 00:02:13,620 --> 00:02:15,745 is iets wat ons het reeds met. 42 00:02:15,745 --> 00:02:18,880 Ons kan net gebruik dit op 'n groter skaal. 43 00:02:18,880 --> 00:02:21,680 >> On line 14, ons het hierdie printf funksie, 44 00:02:21,680 --> 00:02:25,620 wat ons toelaat om die druk van die staat van verskeie stukke van inligting. 45 00:02:25,620 --> 00:02:28,880 En dit is iets wat jy moet hefboom binne jou program 46 00:02:28,880 --> 00:02:33,100 om te probeer om uit te vind presies wat gebeur in verskeie reëls van die kode. 47 00:02:33,100 --> 00:02:36,350 So selfs al is dit nie die finale uitset dat ons eintlik 48 00:02:36,350 --> 00:02:39,830 wil produseer uit hierdie program, steeds ons 49 00:02:39,830 --> 00:02:42,300 dalk 'n debug het state waar ons 50 00:02:42,300 --> 00:02:46,970 kan probeer om uit te vind presies wat gebeur binnekant van ons kode. 51 00:02:46,970 --> 00:02:51,210 >> So in hierdie geval, sal ek printf met die debug tag. 52 00:02:51,210 --> 00:02:53,540 In hierdie geval, dit is net 'n debug string 53 00:02:53,540 --> 00:02:56,840 dat ek up-om sodat dit baie duidelik in die produksie van my kode 54 00:02:56,840 --> 00:02:59,200 wat dit is wat ek wil om te wys. 55 00:02:59,200 --> 00:03:04,410 En uitset hier die aantal dat ons bereken. 56 00:03:04,410 --> 00:03:06,800 >> In hierdie geval, kan ek wil presies weet 57 00:03:06,800 --> 00:03:11,380 wat voor gebeur en na 'n paar spesifieke berekening. 58 00:03:11,380 --> 00:03:16,224 So ek kan 'n printf gebruik voordat en na die lyn van die kode. 59 00:03:16,224 --> 00:03:18,640 In hierdie geval, ek kon selfs maak dit 'n bietjie meer duidelik 60 00:03:18,640 --> 00:03:21,960 deur te sê debug voor en ontfout na so 61 00:03:21,960 --> 00:03:26,540 dat ek myself nie te verwar met verskeie reëls wat identies lyk. 62 00:03:26,540 --> 00:03:32,290 >> Nou as ons dit en hardloop heropstel dit 'n getal soos vyf weer 63 00:03:32,290 --> 00:03:35,090 ons kan sien dat ons nou uitset voor en na 64 00:03:35,090 --> 00:03:40,670 en vind dat ons nie gedoen het nie 'n duidelike afdeling of duidelik dat die aantal 65 00:03:40,670 --> 00:03:43,680 dat ons eintlik wil doen. 66 00:03:43,680 --> 00:03:48,660 Nou in hierdie geval, dit is nie regtig 'n duidelike uitset. 67 00:03:48,660 --> 00:03:52,440 Dit is nie regtig 'n duidelike uitkoms wat ons wil uit hierdie spesifieke program. 68 00:03:52,440 --> 00:03:54,427 >> En dit is, weer 'n bietjie slinks. 69 00:03:54,427 --> 00:03:57,510 Maar, miskien, een van die dinge wat ons kan doen as die spesifikasie gesê 70 00:03:57,510 --> 00:04:01,900 dat ons wil hierdie deel deur 2 en voeg 1-- so met ander woorde, 71 00:04:01,900 --> 00:04:04,550 ons wil dan up-- te rond ons kan weet dat ons kon 72 00:04:04,550 --> 00:04:08,060 doen daardie spesifieke ding, in hierdie geval. 73 00:04:08,060 --> 00:04:14,010 Nou hier weet ons dat ons sal wees in staat om 1 te voeg tot ons gehalveer nommer. 74 00:04:14,010 --> 00:04:16,490 >> Kom ons heropstel hierdie en bevestig dat hierdie 75 00:04:16,490 --> 00:04:18,860 gedra die manier wat ons wil. 76 00:04:18,860 --> 00:04:21,980 Ons kan nou sien dat voor met, ons het die nommer 5. 77 00:04:21,980 --> 00:04:26,620 Nadat ons die nommer 3, wat volgens ons spesifikasie, 78 00:04:26,620 --> 00:04:29,292 is wat ons wou doen. 79 00:04:29,292 --> 00:04:31,000 Maar as ons kyk na die uitset hier, kan ons 80 00:04:31,000 --> 00:04:33,760 sien dat ons 'n ander kan hê fout geheel en al, wat is 81 00:04:33,760 --> 00:04:36,940 dat ons begin ons telling van 0. 82 00:04:36,940 --> 00:04:39,390 >> Nou weer, dit is iets wat ons gesien het in die verlede 83 00:04:39,390 --> 00:04:42,500 en ons kan baie maklik op te los. 84 00:04:42,500 --> 00:04:44,790 Maar in hierdie geval, ons het ook die voordeel 85 00:04:44,790 --> 00:04:48,940 van die gebruik van die printf verklaring direk binnekant van die lus vir 86 00:04:48,940 --> 00:04:52,930 om te weet presies waar die fout is wat plaasvind. 87 00:04:52,930 --> 00:04:55,150 So printf state baie nuttig om te help 88 00:04:55,150 --> 00:04:57,940 jy bepaal waar presies in jou bronkode, 89 00:04:57,940 --> 00:05:00,620 'n spesifieke fout voorkom. 90 00:05:00,620 --> 00:05:03,650 >> En dit is ook belangrik om te besef dat, soos ons skryf kode, 91 00:05:03,650 --> 00:05:06,052 ons kan aannames oor die toestand van 'n program. 92 00:05:06,052 --> 00:05:08,510 Of ons kan aannames oor wat deel van die program 93 00:05:08,510 --> 00:05:13,020 is eintlik reg of verkeerd wanneer later as wat ons bou op die program 94 00:05:13,020 --> 00:05:15,950 en maak dit deel van 'n komplekse en groter program 95 00:05:15,950 --> 00:05:19,700 dat ons besef dat 'n aspek van wat is eintlik karretjie. 96 00:05:19,700 --> 00:05:22,680 >> Die gebruik printf werklik kan help vernou en identifiseer 97 00:05:22,680 --> 00:05:26,430 die streke van 'n program wat nie kan word presies gedra die manier waarop ons 98 00:05:26,430 --> 00:05:29,500 verwag nie, op grond van ons aannames. 99 00:05:29,500 --> 00:05:31,460 Maar daar is ander instrumente beskikbaar, asook, 100 00:05:31,460 --> 00:05:34,860 wat ons toelaat om te probeer om figuur waar 'n fout is wat plaasvind 101 00:05:34,860 --> 00:05:39,930 en ook spesifiek die dinge wat gebeur binnekant van die program. 102 00:05:39,930 --> 00:05:41,990 >> Sodat die gebruik van printf is baie nuttig wanneer ons wil 103 00:05:41,990 --> 00:05:45,900 om spesifieke areas van identifiseer 'n program wat 'n fout het. 104 00:05:45,900 --> 00:05:47,730 Maar dit raak ook vervelige na 'n rukkie. 105 00:05:47,730 --> 00:05:50,500 In hierdie geval, dit is 'n relatief eenvoudige program 106 00:05:50,500 --> 00:05:52,750 met net een of twee veranderlikes. 107 00:05:52,750 --> 00:05:57,260 En dit is baie maklik vir ons om druk die waarde van daardie veranderlikes 108 00:05:57,260 --> 00:05:59,670 in die konteks van die groter program. 109 00:05:59,670 --> 00:06:02,670 >> Maar ons kan 'n ander het program wat baie veranderlikes het. 110 00:06:02,670 --> 00:06:06,530 En dit kan nie heeltemal wees so maklik om te gebruik printf 111 00:06:06,530 --> 00:06:10,120 om te probeer om te evalueer wat gebeur aan elke een van daardie veranderlikes 112 00:06:10,120 --> 00:06:13,590 as die program uitvoering. 113 00:06:13,590 --> 00:06:16,960 Daar is 'n program wat bestaan bekend as 'n debugger program. 114 00:06:16,960 --> 00:06:20,320 In hierdie geval, die een wat ons sal gebruik is die GNU debugger, of GDB, 115 00:06:20,320 --> 00:06:24,260 wat ons toelaat om die interne ondersoek werking van 'n program in 'n baie meer 116 00:06:24,260 --> 00:06:25,700 gedetailleerde manier. 117 00:06:25,700 --> 00:06:28,810 >> Ons kan eintlik voer GDB uit die opdrag lyn 118 00:06:28,810 --> 00:06:35,370 hier deur eenvoudig te tik en die GDB opdrag wat ons wil ontfout. 119 00:06:35,370 --> 00:06:37,550 In hierdie geval, tel. 120 00:06:37,550 --> 00:06:41,650 Nou in hierdie geval, kan ons sien dat dit bring ons by 'n spoedige dat GDB sê. 121 00:06:41,650 --> 00:06:44,020 En ons kan eintlik voer opdragte GDB 122 00:06:44,020 --> 00:06:48,260 om werklik te begin uitvoering van die program, stop dit by sekere punte, 123 00:06:48,260 --> 00:06:51,060 evalueer die veranderlikes en inspekteer die veranderlikes wat 124 00:06:51,060 --> 00:06:54,152 bestaan ​​in die program staat op daardie oomblik, 125 00:06:54,152 --> 00:06:55,110 en so aan en so voort. 126 00:06:55,110 --> 00:06:57,240 Dit bied 'n baie krag om ons. 127 00:06:57,240 --> 00:06:59,960 >> Maar dit gebeur net so dat die CS50 IDE ook 128 00:06:59,960 --> 00:07:05,870 bied 'n GUI of 'n gebruiker koppelvlak vir GDB dat 129 00:07:05,870 --> 00:07:11,120 ons toelaat om dit te doen sonder die command line interface hoegenaamd 130 00:07:11,120 --> 00:07:13,560 of glad selfs. 131 00:07:13,560 --> 00:07:16,930 Die manier wat ek kan toegang tot daardie is deur die gebruik van die debug knoppie 132 00:07:16,930 --> 00:07:20,120 by die top van die CS50 IDE. 133 00:07:20,120 --> 00:07:24,280 Nou in die verlede, wat ons het gesien is dat ons die opdrag 134 00:07:24,280 --> 00:07:27,660 lyn te stel en dan loop 'n program. 135 00:07:27,660 --> 00:07:29,790 >> Die debug knoppie doen beide van die stappe. 136 00:07:29,790 --> 00:07:34,380 Maar dit sal ook bring die blad debugger op die ver regs 137 00:07:34,380 --> 00:07:38,280 wat ons toelaat om 'n verskeidenheid te inspekteer eienskappe van die program 138 00:07:38,280 --> 00:07:40,500 soos dit die uitvoering. 139 00:07:40,500 --> 00:07:44,280 As ek op ontfout, in hierdie geval is, sal dit te bring 140 00:07:44,280 --> 00:07:48,230 'n nuwe blad in die konsole venster aan die onderkant. 141 00:07:48,230 --> 00:07:51,160 >> En jy kan sien dat hierdie blad het inligting op die heel boonste. 142 00:07:51,160 --> 00:07:52,670 En ons kan grootliks ignoreer. 143 00:07:52,670 --> 00:07:54,800 Maar een van die dinge wat ons wil aan om in kennis 144 00:07:54,800 --> 00:07:57,170 is dat dit uitset dieselfde ding wat ons 145 00:07:57,170 --> 00:08:03,000 sou kry as ons probeer om te hardloop maak op die C-program in die terminale venster. 146 00:08:03,000 --> 00:08:06,230 >> Hier kan ons sien dit loop klang, en dit het 'n verskeidenheid van vlae, 147 00:08:06,230 --> 00:08:12,660 en dit is die samestelling van ons count.c lêer, wat die geselekteerde blad teen die tyd was 148 00:08:12,660 --> 00:08:15,100 dat ek getref debug. 149 00:08:15,100 --> 00:08:18,010 So dit is baie nuttig omdat nou die gebruik van hierdie debug knoppie, 150 00:08:18,010 --> 00:08:23,280 kan ons gelyktydig te stel en dan die program uitvoer dat ons eintlik 151 00:08:23,280 --> 00:08:24,460 wil hardloop. 152 00:08:24,460 --> 00:08:27,880 >> Een van die vlae wat belangrik is, in hierdie geval, 153 00:08:27,880 --> 00:08:30,190 Ons het eintlik al met behulp van vir die langste tyd 154 00:08:30,190 --> 00:08:32,450 maar ook net het 'n paar hand gewapper [onhoorbaar], wat 155 00:08:32,450 --> 00:08:33,820 is hierdie een hier. 156 00:08:33,820 --> 00:08:35,790 In klang, dit sê -ggdb3. 157 00:08:35,790 --> 00:08:38,570 158 00:08:38,570 --> 00:08:41,250 In hierdie geval, wat ons is vertel klang, ons samesteller, 159 00:08:41,250 --> 00:08:43,820 is dat ons wil hê dat ons program saamstel. 160 00:08:43,820 --> 00:08:46,810 Maar ook wat genoem simbool inligting 161 00:08:46,810 --> 00:08:50,940 sodat die samesteller eintlik toegang om 'n groot deel van die onderliggende inligting 162 00:08:50,940 --> 00:08:52,610 vervat in die program. 163 00:08:52,610 --> 00:08:55,260 >> Meer spesifiek, die aantal funksies wat ek het, 164 00:08:55,260 --> 00:08:58,000 die name van die funksies, die veranderlikes, die tipes 165 00:08:58,000 --> 00:09:01,730 dat diegene veranderlikes is, en 'n verskeidenheid ander dinge wat die debugger help 166 00:09:01,730 --> 00:09:04,350 voer sy operasie. 167 00:09:04,350 --> 00:09:06,600 Nou is daar is iets anders dit is belangrik om te noem 168 00:09:06,600 --> 00:09:10,280 wanneer ons bespreek loop 'n program in hierdie manier. 169 00:09:10,280 --> 00:09:13,660 >> Let daarop dat dit eintlik gelei tot 'n nuwe blad in ons konsole 170 00:09:13,660 --> 00:09:14,780 langs die onderkant. 171 00:09:14,780 --> 00:09:18,600 Ons het nie meer om interaksie direk met die terminale venster. 172 00:09:18,600 --> 00:09:21,420 Maar hierdie nuwe blad is eintlik 'n terminale venster. 173 00:09:21,420 --> 00:09:26,710 Dit is net om die lopende spesifieke program wat ons geskep het. 174 00:09:26,710 --> 00:09:29,270 >> Let daarop dat aan die onderkant, in kombinasie met 'n paar uitset 175 00:09:29,270 --> 00:09:33,500 deur kletteren die samesteller en GDB, wat ons kan grootliks te ignoreer, 176 00:09:33,500 --> 00:09:37,570 dit eintlik toon die opbrengs van ons program op die heel onderste. 177 00:09:37,570 --> 00:09:41,240 Nou is dit belangrik om te besef dat dit 'n venster eintlik 178 00:09:41,240 --> 00:09:43,360 sal jou toon die uitset van jou program 179 00:09:43,360 --> 00:09:47,190 maar kan ook insette te aanvaar vir daardie program, as well. 180 00:09:47,190 --> 00:09:49,260 >> So wat sê kennisgewing Gee 'n getal, 181 00:09:49,260 --> 00:09:53,050 wat dieselfde uitset wat ons gehad het het in die terminale venster voor. 182 00:09:53,050 --> 00:09:55,510 Maar dit is nou getoon in hierdie nuwe blad. 183 00:09:55,510 --> 00:09:56,550 Ek kan 'n aantal insette. 184 00:09:56,550 --> 00:10:00,900 En dit sal eintlik funksie as ons verwag 185 00:10:00,900 --> 00:10:05,890 wys ons ons ontfout, uitvoer, die uitset wat kan wees karretjie, 186 00:10:05,890 --> 00:10:07,010 Soos ons vantevore gesien het. 187 00:10:07,010 --> 00:10:10,460 En op die heel onderste, dit het eintlik 'n paar ekstra uitset 188 00:10:10,460 --> 00:10:14,550 van die BBP net sê dat hierdie program voltooi het. 189 00:10:14,550 --> 00:10:16,655 >> Nou as jy gesien het in hierdie bepaalde loop deur, 190 00:10:16,655 --> 00:10:19,370 dit was nie besonder nuttige want selfs 191 00:10:19,370 --> 00:10:23,740 al het ons die debugger spyskaart kom up, was dit nog steeds 'n lopende program. 192 00:10:23,740 --> 00:10:26,790 Op geen punt het dit eintlik breek uitvoering vir ons 193 00:10:26,790 --> 00:10:30,767 in staat wees om al inspekteer die veranderlikes wat binne. 194 00:10:30,767 --> 00:10:32,850 Daar is iets anders wat ons moet doen ten einde 195 00:10:32,850 --> 00:10:36,910 om GDB kry om te erken dat ons wil om die uitvoering van die program breek 196 00:10:36,910 --> 00:10:42,820 en nie net toelaat dat dit om voort te gaan gewoonlik as ons sou in enige ander geval. 197 00:10:42,820 --> 00:10:45,530 >> Ten einde uitvoering te breek, op 'n sekere spesifieke lyn, 198 00:10:45,530 --> 00:10:47,830 ons nodig het om te skep wat is genoem 'n breek punt. 199 00:10:47,830 --> 00:10:52,670 En 'n breek punt is baie maklik geskep in hierdie CS50 IDE deur jou muis 200 00:10:52,670 --> 00:10:57,090 en aan die linkerkant klik direk van 'n paar spesifieke lyn nommer. 201 00:10:57,090 --> 00:10:59,920 Sodra ek dit doen, 'n rooi dot verskyn, wat dui 202 00:10:59,920 --> 00:11:02,300 dat daardie lyn is nou 'n breek punt. 203 00:11:02,300 --> 00:11:07,540 >> En die volgende keer dat ek hardloop GDB, dit sal ophou uitvoering op daardie breek punt 204 00:11:07,540 --> 00:11:10,280 wanneer dit die lyn van die kode bereik. 205 00:11:10,280 --> 00:11:12,230 Nou is dit 'n belangrike ding om te besef 206 00:11:12,230 --> 00:11:16,140 dat dit nie noodwendig die geval dat elke reël van die kode 207 00:11:16,140 --> 00:11:17,880 is eintlik toeganklik is. 208 00:11:17,880 --> 00:11:23,780 As ek 'n funksie te skep hier vir example-- leemte f-- 209 00:11:23,780 --> 00:11:31,230 en net nie 'n gedrukte lyn here-- hallo world-- as ek nooit hierdie funksie, 210 00:11:31,230 --> 00:11:34,770 dit sal die geval wees dat, As ek 'n breek punt hier, 211 00:11:34,770 --> 00:11:36,220 die funksie sal nooit genoem word. 212 00:11:36,220 --> 00:11:38,310 En daarom is dit veral breek punt 213 00:11:38,310 --> 00:11:43,040 sal nooit eintlik stilstaan uitvoering van die program. 214 00:11:43,040 --> 00:11:48,020 >> So kom ons sê dat ek korrek te skep 'n breek punt op sommige reël van die kode 215 00:11:48,020 --> 00:11:50,340 wat sal eintlik uitgevoer word. 216 00:11:50,340 --> 00:11:53,470 Nou in hierdie geval, dit is die eerste lyn in die belangrikste funksie. 217 00:11:53,470 --> 00:11:56,630 So sal dit beslis die geval wees dat, so gou as ek begin uitvoering, 218 00:11:56,630 --> 00:11:58,580 die heel eerste lyn sal bereik. 219 00:11:58,580 --> 00:12:00,230 GDB sal uitvoering breek. 220 00:12:00,230 --> 00:12:04,100 En dan, sal ek in staat wees om interaksie met die debugger. 221 00:12:04,100 --> 00:12:08,480 >> Jy kan verskeie lyne soos gestel inspeksiepunte, as jy wil. 222 00:12:08,480 --> 00:12:11,365 Ons kan ook 'n lyn te skep up hier in hierdie segment van die kode 223 00:12:11,365 --> 00:12:12,490 wat sal nooit bereik word nie. 224 00:12:12,490 --> 00:12:14,744 En ons kan ook 'n verdere hieronder. 225 00:12:14,744 --> 00:12:16,660 Die rede is dat ons sou wil hierdie ons sal doen 226 00:12:16,660 --> 00:12:19,119 gaan in 'n bietjie meer detail in net 'n oomblik. 227 00:12:19,119 --> 00:12:21,660 So vir nou, laat my net te skakel hierdie bykomende breek punte 228 00:12:21,660 --> 00:12:24,940 sodat ons kan kyk na wat gebeur toe ek 'n enkele break 229 00:12:24,940 --> 00:12:27,650 punt in my program. 230 00:12:27,650 --> 00:12:29,410 Ek het het 'n paar veranderinge aan hierdie program. 231 00:12:29,410 --> 00:12:30,750 So ek nodig het om dit te red. 232 00:12:30,750 --> 00:12:34,490 Ek sal op debug sodat ek kan begin die opstel en dan 233 00:12:34,490 --> 00:12:36,880 uitvoering van die debugger. 234 00:12:36,880 --> 00:12:40,632 >> Ons sal sien dat, na oomblikke, die lyn wat ons as die breek gekies 235 00:12:40,632 --> 00:12:43,360 punt is uitgelig in geel. 236 00:12:43,360 --> 00:12:47,440 Ons kan ook sien dat in die regs bo in die debug paneel 237 00:12:47,440 --> 00:12:50,940 dat die ikoon pouse het gedraai in 'n bietjie speel ikoon. 238 00:12:50,940 --> 00:12:54,710 Dit beteken dat ons breek uitvoering, in hierdie spesifieke geval. 239 00:12:54,710 --> 00:12:57,840 En slaan die Play knoppie sal ons toelaat om uitvoering te hervat 240 00:12:57,840 --> 00:13:00,000 op daardie spesifieke punt. 241 00:13:00,000 --> 00:13:03,240 >> Let daarop dat daar is 'n paar van die ander knoppies beskikbaar in hierdie debug paneel, 242 00:13:03,240 --> 00:13:04,220 ook. 243 00:13:04,220 --> 00:13:09,470 Stap oor, wat my toelaat om voer dat een reël van die kode 244 00:13:09,470 --> 00:13:14,030 en stap oor na daardie lyn na die volgende een, wat in hierdie geval, 245 00:13:14,030 --> 00:13:17,060 sou beteken dat die printf verklaring is uitgevoer. 246 00:13:17,060 --> 00:13:22,310 En dit sal dan breek uitvoering op die lyn 13, soos so. 247 00:13:22,310 --> 00:13:25,090 >> En daar is ook 'n stap in funksie, wat 248 00:13:25,090 --> 00:13:28,950 is nuttig as ek ander geskep het funksies elders in die bronkode. 249 00:13:28,950 --> 00:13:31,420 En ek wil om te stap in daardie funksies eerder as 250 00:13:31,420 --> 00:13:33,050 voer wat funksie as 'n geheel. 251 00:13:33,050 --> 00:13:37,279 Maar ons sal meer kyk na die stap in funksie in net 'n oomblik. 252 00:13:37,279 --> 00:13:40,320 Nou sien 'n paar ander dinge wat werklik bestaan ​​binne hierdie debug paneel. 253 00:13:40,320 --> 00:13:44,110 >> Ons het hierdie paneel het die noem stapel, wat ons wys 254 00:13:44,110 --> 00:13:45,300 waar ons presies. 255 00:13:45,300 --> 00:13:48,550 In hierdie geval, ons is binne- van die belangrikste funksie. 256 00:13:48,550 --> 00:13:50,880 Ons script genoem count.c. 257 00:13:50,880 --> 00:13:53,820 En ons gebeur op wees lyn 13, kolom een, wat 258 00:13:53,820 --> 00:13:58,950 is presies wat die gemerkte streek van die bron-kode dui, as well. 259 00:13:58,950 --> 00:14:02,435 >> Nou sien dat hierdie toon ook onder die plaaslike veranderlike artikel 260 00:14:02,435 --> 00:14:06,710 al die veranderlikes wat bestaan ​​binne hierdie funksie. 261 00:14:06,710 --> 00:14:08,930 Dit is belangrik om daarop te let dat al die veranderlikes 262 00:14:08,930 --> 00:14:12,580 verskyn in hierdie lokale veranderlike artikel binne 'n funksie, 263 00:14:12,580 --> 00:14:14,380 selfs nog voordat hulle gedefinieer word. 264 00:14:14,380 --> 00:14:19,160 Ons kan hier sien dat ons 'n veranderlike genoem num, het 'n standaard waarde van 0, 265 00:14:19,160 --> 00:14:21,280 en dit is van die tipe int. 266 00:14:21,280 --> 00:14:24,110 >> Nou voordat ons eintlik inisialiseer al hierdie veranderlikes, 267 00:14:24,110 --> 00:14:26,685 ons is nie noodwendig gewaarborg om 'n waarde van 0 te sien. 268 00:14:26,685 --> 00:14:29,200 En afhangende van ander teregstellings wat jy gedoen 269 00:14:29,200 --> 00:14:32,020 en die toestand van jou geheue wanneer jy eintlik hierdie program, 270 00:14:32,020 --> 00:14:34,605 jy dalk vind dat jy moenie waardes van 0 nie sien 271 00:14:34,605 --> 00:14:36,550 en in plaas daarvan, 'n ander gek getalle. 272 00:14:36,550 --> 00:14:38,390 >> Maar moenie bekommerd wees oor dit. 273 00:14:38,390 --> 00:14:44,610 Dit gaan nie relevant te word totdat jy eintlik inisialiseer die waarde. 274 00:14:44,610 --> 00:14:49,630 Nou in hierdie geval, kan ons sien dat Ek het 'n paar uitgevoer uitsette. 275 00:14:49,630 --> 00:14:52,131 En ek is, nou, gestop uitvoering. 276 00:14:52,131 --> 00:14:53,880 Maar in hierdie geval, wat Ek wil regtig om te doen 277 00:14:53,880 --> 00:14:58,060 is nou stap oor die lyn van die kode sodat ek kan eintlik 278 00:14:58,060 --> 00:15:04,390 soektog van die gebruiker vir daardie int wat ons wil gebruik in ons program. 279 00:15:04,390 --> 00:15:07,060 >> Nou in hierdie geval, toe Ek getref stap oor, kennisgewing 280 00:15:07,060 --> 00:15:11,940 dat die breek of eerder die CV knoppie verander om hierdie knoppie Stop 281 00:15:11,940 --> 00:15:14,022 omdat hierdie kode is eintlik die uitvoering. 282 00:15:14,022 --> 00:15:15,730 Wat gebeur nou is dat dit 283 00:15:15,730 --> 00:15:21,630 wag vir ons om insette inligting soos ons kan sien deur ons uitset teks 284 00:15:21,630 --> 00:15:23,600 aan die onderkant. 285 00:15:23,600 --> 00:15:25,787 >> So nou, dit is nie eintlik gestop, 286 00:15:25,787 --> 00:15:28,620 selfs al is dit, soort van, verskyn te wees, want niks gebeur nie. 287 00:15:28,620 --> 00:15:32,360 Maar dit net so gebeur dat in my spesifieke geval op die lyn 13, 288 00:15:32,360 --> 00:15:34,210 Ek wag vir die gebruiker insette. 289 00:15:34,210 --> 00:15:39,130 En so GDB is nie in staat om te inspekteer 'n program soos dit loop. 290 00:15:39,130 --> 00:15:43,370 >> Nou is die volgende keer dat ek 'n paar tree input-- so ek sal dat die getal 5 betree, 291 00:15:43,370 --> 00:15:46,140 soos ons gesien het in die past-- getref terug, en ons 292 00:15:46,140 --> 00:15:51,430 agterkom dat, onmiddellik, GDB pouses en weer, beklemtoon die volgende reël. 293 00:15:51,430 --> 00:15:55,320 Maar let dat nou, as 'n gevolg van ons skryf 'n waarde, 294 00:15:55,320 --> 00:15:58,930 ons het wat waarde binnekant opgedateer van ons plaaslike veranderlikes, wat 295 00:15:58,930 --> 00:16:05,560 is baie nuttig om presies weet wat dit was hulle aantal in die geheue. 296 00:16:05,560 --> 00:16:10,650 >> Nou kan ek toelaat dat hierdie program om voort te gaan speel tot aan die einde van die uitvoering daarvan 297 00:16:10,650 --> 00:16:12,570 deur slaan CV. 298 00:16:12,570 --> 00:16:16,410 Ons kan sien dat baie vinnig doen die program afwerking uitvoering 299 00:16:16,410 --> 00:16:19,790 met dieselfde uitset dat ons gehad het voordat die debugger sluit, 300 00:16:19,790 --> 00:16:23,170 en nou hierdie program het heeltemal opgehou. 301 00:16:23,170 --> 00:16:25,320 >> Ek toon dat slegs vir die doeleindes van sien wat 302 00:16:25,320 --> 00:16:27,280 gebeur wanneer ons eintlik getref CV. 303 00:16:27,280 --> 00:16:30,640 Maar ons eintlik gaan wil terug te gaan in hierdie program 304 00:16:30,640 --> 00:16:33,820 sodat ons kan probeer om debug presies wat gebeur. 305 00:16:33,820 --> 00:16:37,980 Nou dat ek die gebruik van die debugger, kan ek nie hierdie debug printf state nodig. 306 00:16:37,980 --> 00:16:43,860 >> So kon ek hulle te verwyder, sal ek doen as nou net om terug te gaan na ons eenvoudiger kode 307 00:16:43,860 --> 00:16:45,950 dat ons 'n oomblik gelede. 308 00:16:45,950 --> 00:16:48,790 En toe ek spaar die program en dit uit te voer, 309 00:16:48,790 --> 00:16:53,700 dit sal weer, gaan na dat die aanvanklike breek punt wat ek gehad het op die lyn 11. 310 00:16:53,700 --> 00:16:57,700 En ek sal in staat wees om te inspekteer my veranderlikes as wat ek wil doen. 311 00:16:57,700 --> 00:17:00,695 >> Dit gebeur net so dat dit deel is nie baie interessant, 312 00:17:00,695 --> 00:17:04,364 En ek weet dat ek gaan om uit te druk hierdie stelling. 313 00:17:04,364 --> 00:17:05,280 Voer asseblief 'n nommer. 314 00:17:05,280 --> 00:17:08,099 En dan, ek weet dat ek gaan aan die gebruiker vir daardie heelgetal te vra. 315 00:17:08,099 --> 00:17:13,329 So miskien, het ek eintlik wil beweeg my breek punt 'n bietjie verder af. 316 00:17:13,329 --> 00:17:16,710 >> Jy kan breek punte verwyder deur te kliek, weer, direk 317 00:17:16,710 --> 00:17:18,460 aan die linkerkant van die lyn nommer. 318 00:17:18,460 --> 00:17:22,200 Dat die rooi dot sal verdwyn, wat aandui dat breek punt nou is weg. 319 00:17:22,200 --> 00:17:24,780 Nou in hierdie geval, uitvoering is gestop. 320 00:17:24,780 --> 00:17:27,770 En so is dit nie eintlik gaan hervat in daardie spesifieke geval. 321 00:17:27,770 --> 00:17:30,210 Maar ek kan 'n breek te stel wys 'n bietjie later. 322 00:17:30,210 --> 00:17:33,880 >> En toe ek nou weer my kode, sal dit hervat en vertel 323 00:17:33,880 --> 00:17:36,190 die punt van daardie breek punt. 324 00:17:36,190 --> 00:17:37,374 Weereens, ek getref CV. 325 00:17:37,374 --> 00:17:39,040 Lyk nie soos enigiets gebeur. 326 00:17:39,040 --> 00:17:41,450 Maar dit is omdat my kode is wag vir insette. 327 00:17:41,450 --> 00:17:47,900 Ek sal 'n nommer 5 gaan, druk Enter, en nou die volgende breekpunt sal getref word. 328 00:17:47,900 --> 00:17:50,570 >> Nou in hierdie geval, dit is die reël van die kode 329 00:17:50,570 --> 00:17:53,820 dat, voor, ons het geweet gebeur karretjie wees. 330 00:17:53,820 --> 00:17:57,590 So laat evalueer wat gebeur op hierdie spesifieke punt in die tyd. 331 00:17:57,590 --> 00:18:02,620 Wanneer 'n lyn is uitgelig, hierdie lyn het nog nie uitgevoer is. 332 00:18:02,620 --> 00:18:06,490 So in hierdie geval, kan ons sien dat ek 'n nommer, wat 333 00:18:06,490 --> 00:18:11,610 Ek het 'n heelgetal genoem num dat 'n waarde 5 het. 334 00:18:11,610 --> 00:18:15,090 En ek gaan optree paar wiskunde op daardie nommer. 335 00:18:15,090 --> 00:18:20,130 >> As ek stap oor dat ons kan sien dat die waarde vir num 336 00:18:20,130 --> 00:18:23,780 het verander in ooreenstemming met die rekenkundige dat ons eintlik gedoen het. 337 00:18:23,780 --> 00:18:26,810 En nou dat ons binnekant van hierdie lus 338 00:18:26,810 --> 00:18:29,090 of nou dat die lus self is uitgelig, 339 00:18:29,090 --> 00:18:32,450 sien ons dat ons 'n nuwe veranderlike genoem i dat 340 00:18:32,450 --> 00:18:35,370 gaan gebruik word in die lus. 341 00:18:35,370 --> 00:18:38,230 >> Nou onthou voor dat ek genoem dat jy soms is 342 00:18:38,230 --> 00:18:43,470 gaan om 'n soort van mal te sien getalle as verstek voor dat die getal 343 00:18:43,470 --> 00:18:45,530 of dat veranderlike eintlik geïnisialiseer. 344 00:18:45,530 --> 00:18:49,040 Ons kan presies sien dat hier in die hierdie veranderlike 345 00:18:49,040 --> 00:18:51,345 genoem i, wat nie nog geïnisialiseer 346 00:18:51,345 --> 00:18:53,560 ten tyde van die klem op. 347 00:18:53,560 --> 00:18:57,070 Maar ons kan sien dat dit 'n paar nommer dat ons nie eintlik sou verwag. 348 00:18:57,070 --> 00:18:57,620 >> Dit is OK. 349 00:18:57,620 --> 00:18:59,661 Moenie bekommerd wees oor dit want ons het nie eintlik 350 00:18:59,661 --> 00:19:04,970 geïnisialiseer dat die getal, totdat ek stap oor die lyn en die waarde 351 00:19:04,970 --> 00:19:08,560 i is geïnisialiseer om die waarde 1. 352 00:19:08,560 --> 00:19:11,400 So om te sien dat dit is eintlik die geval is, laat ons stap oor. 353 00:19:11,400 --> 00:19:14,420 Ons kan nou sien dat daardie line uitgevoer is. 354 00:19:14,420 --> 00:19:17,000 En ons is nou die klem op hierdie printf lyn. 355 00:19:17,000 --> 00:19:22,230 >> En ons kan nou sien hoe ons waardes van i en 3 het verander met verloop van tyd. 356 00:19:22,230 --> 00:19:26,450 Dit is baie nuttig om te doen, in werklikheid, is om herhaaldelik stap oor lyne. 357 00:19:26,450 --> 00:19:30,480 En jy kan eintlik vind wat gebeur binnekant van jou lus 358 00:19:30,480 --> 00:19:33,660 en wat gebeur met die veranderlikes binnekant van die lus 359 00:19:33,660 --> 00:19:39,200 as wat die program uitvoering voorkom een ​​stap op 'n tyd. 360 00:19:39,200 --> 00:19:41,110 >> Nou op hierdie punt, ek gestap oor net genoeg 361 00:19:41,110 --> 00:19:44,210 dat ek nou aan die einde van my program. 362 00:19:44,210 --> 00:19:46,980 As ek stap oor dit, dit sal eintlik ophou uitvoering 363 00:19:46,980 --> 00:19:48,860 soos ons gesien het in die verlede. 364 00:19:48,860 --> 00:19:52,110 Laat my begin dit weer, so dat ek iets anders kan uitwys, 365 00:19:52,110 --> 00:19:53,320 ook. 366 00:19:53,320 --> 00:19:55,350 >> In hierdie geval, is dit my nou vra, weer, 367 00:19:55,350 --> 00:19:57,100 vir 'n aantal, wat Ek sal weer, betree. 368 00:19:57,100 --> 00:20:00,300 Maar hierdie keer, ek gaan om in te gaan 'n groter aantal sodat die lus 369 00:20:00,300 --> 00:20:02,540 sal Itereer meer keer. 370 00:20:02,540 --> 00:20:06,090 In hierdie geval, ek gaan om 'n waarde van 11 tree. 371 00:20:06,090 --> 00:20:08,390 >> Nou weer, want ek wil stel 'n breek punt op reël 15, 372 00:20:08,390 --> 00:20:10,490 dit gaan om daardie streep te lig. 373 00:20:10,490 --> 00:20:12,980 Ons kan sien dat ons nommer 11 is korrek 374 00:20:12,980 --> 00:20:15,560 verteenwoordig in ons plaaslike veranderlikes. 375 00:20:15,560 --> 00:20:22,460 Stepping oor daardie, kan ons nou kyk wat gebeur met ons waarde van i 376 00:20:22,460 --> 00:20:25,680 as ons voortgaan binnekant van hierdie lus. 377 00:20:25,680 --> 00:20:31,960 Dit word aangevul elke keer as ons bereik die top van daardie lus. 378 00:20:31,960 --> 00:20:35,110 >> Nou een van die dinge wat kan nuttig wees om te doen tydens uitvoering 379 00:20:35,110 --> 00:20:40,490 van hierdie program is vir my om eintlik verander die veranderlikes Midstream te sien 380 00:20:40,490 --> 00:20:42,450 Wat gebeur met my program. 381 00:20:42,450 --> 00:20:46,540 In hierdie geval, kan ek eintlik dubbel klik op die waarde. 382 00:20:46,540 --> 00:20:48,040 Let daarop dat dit 'n teks veld. 383 00:20:48,040 --> 00:20:50,280 >> Nou kan ek verskillende betree waardeer heeltemal 384 00:20:50,280 --> 00:20:55,700 om te sien hoe my program optree toe ek daardie veranderlike verander het. 385 00:20:55,700 --> 00:20:59,560 Nou in hierdie geval, die veranderlike i bevat nou die waarde 10. 386 00:20:59,560 --> 00:21:02,810 Maar die program is nog gestop in uitvoering. 387 00:21:02,810 --> 00:21:07,610 Toe ek stap oor, ek sien dat die waarde i, wat ek ingeskryf as 10, 388 00:21:07,610 --> 00:21:12,170 is nie groter as die waarde van num, wat veroorsaak onmiddellik die lus 389 00:21:12,170 --> 00:21:14,240 om te stop uitvoering. 390 00:21:14,240 --> 00:21:16,210 >> Nou is dit nie die enigste rede waarom jy sou 391 00:21:16,210 --> 00:21:19,450 wil die veranderlike in die plek te verander. 392 00:21:19,450 --> 00:21:22,210 Jy kan eintlik wil om te probeer om dit so te verander 393 00:21:22,210 --> 00:21:24,590 dat jy kan voortgaan uitvoering van 'n lus 394 00:21:24,590 --> 00:21:27,370 of sodat jy kan verander 'n bietjie waarde, voordat dit 395 00:21:27,370 --> 00:21:32,630 'n paar spesifieke stel van rekenkundige bereik wat jy oor om te presteer. 396 00:21:32,630 --> 00:21:36,210 >> So nou dat ons eintlik verander die waarde van i as die program is die uitvoering, 397 00:21:36,210 --> 00:21:39,540 dit veroorsaak dat die lus om op te hou voortydig, want almal van 'n skielike, i 398 00:21:39,540 --> 00:21:42,770 gebeur groter as die waarde wees van num, wat beteken dat die lus 399 00:21:42,770 --> 00:21:45,410 nie meer nodig is om uitgevoer word. 400 00:21:45,410 --> 00:21:48,780 Verder, is dit gebeur met die wees geval dat ons verander die waarde van i 401 00:21:48,780 --> 00:21:53,270 wanneer die lyn 17 uitgelig, wat die punt in die tyd was 402 00:21:53,270 --> 00:21:56,280 dat die vir die uitvoering lus was eintlik geëvalueer. 403 00:21:56,280 --> 00:22:00,210 >> As ek die waarde van verander het i op 'n ander lyn, sê 19, 404 00:22:00,210 --> 00:22:03,360 ons anders sou gesien gedrag omdat lyn 19 sou 405 00:22:03,360 --> 00:22:08,310 voltrek voor die lus toestand geherwaardeerde. 406 00:22:08,310 --> 00:22:11,900 Nou op hierdie punt, ek is, weer, aan die einde van hierdie program. 407 00:22:11,900 --> 00:22:15,707 En ek kan nie toelaat dat hierdie om voort te gaan om toelaat dat my program om natuurlik hou. 408 00:22:15,707 --> 00:22:18,290 Maar daar is 'n paar van die dinge wat wat belangrik is om weg te neem is 409 00:22:18,290 --> 00:22:19,960 Van hierdie spesifieke bespreking. 410 00:22:19,960 --> 00:22:22,490 Jy moet evalueer jou eie aannames 411 00:22:22,490 --> 00:22:24,710 oor hoe die kode moet optree. 412 00:22:24,710 --> 00:22:28,220 Enige tyd wat jy dink dat 'n stuk van die kode wat jy ken gebeur om te werk, 413 00:22:28,220 --> 00:22:30,940 dat 'n rooi vlag gaan dalk rug en evalueer, en seker wees 414 00:22:30,940 --> 00:22:33,470 dat jou aanname van hoe dit code bedryf 415 00:22:33,470 --> 00:22:38,290 is eintlik waar om hoe dit is uitgedruk in jou bronkode. 416 00:22:38,290 --> 00:22:41,300 >> Maar nog meer tot die punt was, wanneer ons die gebruik van die debugger, 417 00:22:41,300 --> 00:22:43,920 jy kan breekpunte op sit verskillende reëls van die kode, 418 00:22:43,920 --> 00:22:48,110 wat die debugger om sal veroorsaak breek uitvoering by elk van die lyne 419 00:22:48,110 --> 00:22:52,210 sodat jy kan evalueer die geheue of selfs verander dit in die plek. 420 00:22:52,210 --> 00:22:55,630 En weer, onthou dat jy kan skep verskeie inspeksiepunte sodat jy 421 00:22:55,630 --> 00:23:00,390 kan ook hervat uitvoering, slaan oor groot gedeeltes van die kode, 422 00:23:00,390 --> 00:23:04,790 en dit sal outomaties breek by die volgende breekpunt. 423 00:23:04,790 --> 00:23:07,760 >> Daar is eintlik meer gevorderde kenmerke van die debugger, as well. 424 00:23:07,760 --> 00:23:10,170 Maar ons sal na jou verwys sommige daaropvolgende videos 425 00:23:10,170 --> 00:23:14,090 om werklik terg uitmekaar hoe om die spesifieke funksies te gebruik. 426 00:23:14,090 --> 00:23:15,990 Vir nou, dankie baie dankie vir die kyk. 427 00:23:15,990 --> 00:23:18,080 En voorspoed debugging.