1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> DOUG Lloyd: Në rregull Gdb. 3 00:00:06,830 --> 00:00:08,480 Çfarë është kjo saktësisht? 4 00:00:08,480 --> 00:00:11,310 Pra GDB, e cila qëndron për Debugger GNU, 5 00:00:11,310 --> 00:00:15,040 është një mjet me të vërtetë awesome që ne mund të përdorin për të na ndihmuar debug programet tona, 6 00:00:15,040 --> 00:00:18,210 ose të gjetur se ku gjërat janë do të gabuar në programet tona. 7 00:00:18,210 --> 00:00:22,590 GDB është amazingly fuqishëm, por prodhimit dhe ndërveprimin me të 8 00:00:22,590 --> 00:00:23,830 mund të jetë pak i fshehtë. 9 00:00:23,830 --> 00:00:28,210 Kjo është zakonisht një linjë mjet command, dhe ajo mund të hedhin një shumë mesazhe në ju. 10 00:00:28,210 --> 00:00:31,144 Dhe kjo mund të lloj i vështirë për kuptoj saktësisht se çfarë po ndodh. 11 00:00:31,144 --> 00:00:33,560 Hapat për fat të mirë, ne kemi marrë për të rregulluar këtë problem për ju 12 00:00:33,560 --> 00:00:36,281 si ju punoni me CS50. 13 00:00:36,281 --> 00:00:39,030 Nëse ju nuk jeni duke përdorur grafike Rregullues, i cili kolegu im Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse ka folur mjaft pak rreth në një video që 15 00:00:41,570 --> 00:00:44,740 duhet të jetë e gjatë këtu tani, ju mund të kenë nevojë 16 00:00:44,740 --> 00:00:48,270 të përdorni këto command line mjete për të punuar me GDB. 17 00:00:48,270 --> 00:00:51,250 Në qoftë se ju jeni duke punuar në CS50 IDE, ju nuk keni nevojë për të bërë këtë. 18 00:00:51,250 --> 00:00:53,550 Por në qoftë se ju nuk jeni që punojnë në CS50 IDE, 19 00:00:53,550 --> 00:00:55,750 ndoshta duke përdorur një version të e CS50 Appliance, 20 00:00:55,750 --> 00:00:58,860 apo tjetër Linux veprojnë sistem me GDB instaluar në të, 21 00:00:58,860 --> 00:01:00,980 ju mund të kenë nevojë të përdorin Këto mjete command line. 22 00:01:00,980 --> 00:01:02,860 >> Dhe kur ju e fuqisë duhet për të bërë këtë, është e 23 00:01:02,860 --> 00:01:06,280 e dobishme vetëm për të kuptuar se si GDB punon nga vija e komandës. 24 00:01:06,280 --> 00:01:09,650 Por, përsëri, në qoftë se ju jeni duke përdorur IDE CS50, ju 25 00:01:09,650 --> 00:01:15,400 mund të përdorni Rregullues grafike që është ndërtuar në IDE. 26 00:01:15,400 --> 00:01:18,750 Pra, për të marrë gjërat e sipër me GDB, për të filluar debugging 27 00:01:18,750 --> 00:01:21,220 Procesi i a veçanti program, të gjithë ju duhet të bëni 28 00:01:21,220 --> 00:01:23,810 është lloji Gdb ndiqet me emrin e programit. 29 00:01:23,810 --> 00:01:28,620 Kështu për shembull, në qoftë se programi juaj është i Përshëndetje, ju do të tipit GDB përshëndetje. 30 00:01:28,620 --> 00:01:31,210 >> Kur ju bëni këtë, ju do të jeni për të tërhequr deri mjedisin GDB. 31 00:01:31,210 --> 00:01:33,800 Shpejtë juaj do të ndryshojë, dhe në vend që të është ajo që zakonisht 32 00:01:33,800 --> 00:01:35,841 është kur ju shkruani gjëra në ls e line-- komandës, 33 00:01:35,841 --> 00:01:38,115 cd-- gjithë tipike tuaj Komandat Linux, shpejtë tuaj 34 00:01:38,115 --> 00:01:42,200 do të ndryshojë për të, ndoshta, diçka si kllapa kllapa Gdb. 35 00:01:42,200 --> 00:01:46,630 Kjo është tuaj të re GDB shpejtë, sepse ju jeni brenda mjedisit gdb. 36 00:01:46,630 --> 00:01:49,830 Pasi brenda atij mjedisi, ka dy komandat kryesore 37 00:01:49,830 --> 00:01:52,290 që ju ndoshta do të përdorni në rendin e mëposhtëm. 38 00:01:52,290 --> 00:01:55,200 >> Parë është b, e cila është e shkurtër për pushim. 39 00:01:55,200 --> 00:01:58,690 Dhe pasi të keni tipit B, ju zakonisht shkruani emrin e një funksioni, 40 00:01:58,690 --> 00:02:01,040 ose në qoftë se ju ndodh që të dini rreth çfarë numri linjë 41 00:02:01,040 --> 00:02:04,100 programi juaj ka filluar të sillen pak i çuditshëm, 42 00:02:04,100 --> 00:02:06,370 ju mund të shtypni një linjë Numri edhe atje. 43 00:02:06,370 --> 00:02:09,660 Çfarë b, ose pushim, nuk është ai lejon programin tuaj 44 00:02:09,660 --> 00:02:13,270 për të drejtuar deri në një pikë të caktuar, domethënë, emri i funksionit 45 00:02:13,270 --> 00:02:15,880 që ju të specifikojë ose vija numër që ju specifikoni. 46 00:02:15,880 --> 00:02:18,590 >> Dhe në atë moment, atë do të ngrijë ekzekutimin. 47 00:02:18,590 --> 00:02:21,670 Kjo është një gjë me të vërtetë e mirë, sepse dikur ekzekutimi ka qenë i ngrirë, 48 00:02:21,670 --> 00:02:25,214 ju mund të fillojnë të shumë ngadalë hap përmes programit tuaj. 49 00:02:25,214 --> 00:02:28,130 Në mënyrë tipike, në qoftë se ju keni qenë running programet tuaja, ata janë mjaft të shkurtër. 50 00:02:28,130 --> 00:02:31,250 Zakonisht, ju shkruani dot plagë çfarëdo emri i programit tuaj është, hit Enter, 51 00:02:31,250 --> 00:02:33,470 dhe para se ju mund të injoroj, tuaj Programi ka mbaruar tashmë. 52 00:02:33,470 --> 00:02:36,620 Kjo nuk është me të vërtetë një shumë kohë për të provuar dhe të kuptoj se çfarë po ndodh gabuar. 53 00:02:36,620 --> 00:02:40,920 Pra, me të vërtetë të jetë në gjendje për të ngadalësuar gjëra poshtë duke vendosur një pikë pushim me b, 54 00:02:40,920 --> 00:02:43,040 dhe pastaj shkelën në. 55 00:02:43,040 --> 00:02:46,169 >> Pastaj një herë ju keni vendosur pushim tuaj pikë, ju mund të drejtuar programin. 56 00:02:46,169 --> 00:02:47,960 Dhe në qoftë se ju keni ndonjë argumente command line, 57 00:02:47,960 --> 00:02:51,610 ju specifikoni ato këtu, jo kur ju shkruani GDB emrin programi juaj. 58 00:02:51,610 --> 00:02:55,980 Ju specifikoni të gjitha linjë e komandës Argumentet duke marrë r, ose të drejtuar, 59 00:02:55,980 --> 00:03:00,270 dhe pastaj argumentet e linjës çfarëdo komandës ju keni nevojë për brenda programit tuaj. 60 00:03:00,270 --> 00:03:03,510 Ka një numër të tjera të vërtetë komandat të rëndësishme dhe të dobishme 61 00:03:03,510 --> 00:03:04,970 brenda mjedisit të PBB-së. 62 00:03:04,970 --> 00:03:07,540 Pra, më lejoni vetëm të shpejt shkoj për disa prej tyre. 63 00:03:07,540 --> 00:03:11,320 >> Parë është n, e cila është e shkurtër për vazhdim, dhe ju mund të shtypni tjetër në vend të n, 64 00:03:11,320 --> 00:03:12,304 të dy do të punojë. 65 00:03:12,304 --> 00:03:13,470 Dhe kjo është vetëm stenografi. 66 00:03:13,470 --> 00:03:17,540 Dhe si ju ndoshta keni marrë tashmë përdoret për të, duke qenë në gjendje të shkruani gjëra 67 00:03:17,540 --> 00:03:20,520 shkurtër në përgjithësi është më e mirë. 68 00:03:20,520 --> 00:03:24,100 Dhe çfarë do të bëjë është ajo do të hap përpara një bllok i kodit. 69 00:03:24,100 --> 00:03:26,170 Pra, kjo do të ecë përpara derisa një telefonatë funksion. 70 00:03:26,170 --> 00:03:28,350 Dhe pastaj në vend të zhyten në atë funksion 71 00:03:28,350 --> 00:03:33,130 dhe duke kaluar nëpër të gjithë se funksionet Kodi, ai thjesht do të ketë funksionin. 72 00:03:33,130 --> 00:03:34,400 >> Funksioni do të quhet. 73 00:03:34,400 --> 00:03:35,733 Kjo do të bëjë çdo gjë që puna e saj është. 74 00:03:35,733 --> 00:03:38,870 Ajo do të kthehet një vlerë të funksioni që e quajti atë. 75 00:03:38,870 --> 00:03:42,490 Dhe pastaj ju do të lëvizin në të Linja tjetër e quajtur atë funksion. 76 00:03:42,490 --> 00:03:44,555 Nëse ju doni të hap brenda funksionit, 77 00:03:44,555 --> 00:03:46,430 në vend të vetëm duke pasur ajo ekzekutojë, veçanërisht 78 00:03:46,430 --> 00:03:50,004 në qoftë se ju mendoni se problemi mund të qëndrojnë brenda këtij funksioni, 79 00:03:50,004 --> 00:03:52,670 ju mund të, natyrisht, të vendosur një pushim pika brenda atë funksion. 80 00:03:52,670 --> 00:03:57,820 Ose në qoftë se ju jeni duke punuar, ju mund të përdorin s për të hap një linjë të kodit. 81 00:03:57,820 --> 00:04:01,170 >> Pra, kjo do të hap në dhe pikiatë në funksionet, 82 00:04:01,170 --> 00:04:04,750 në vend të vetëm kanë të ekzekutojë dhe duke vazhduar për në funksion 83 00:04:04,750 --> 00:04:07,380 që ju jeni në për debugging. 84 00:04:07,380 --> 00:04:09,870 Nëse ju ndonjëherë të dëshironi të dini vlera e një variable, 85 00:04:09,870 --> 00:04:12,507 ju mund të shtypni p, ose të shtypura, dhe pastaj emrin e ndryshueshme. 86 00:04:12,507 --> 00:04:15,090 Dhe kjo do të shtypura jashtë për ju, brenda mjedisit gdb, 87 00:04:15,090 --> 00:04:19,110 emri i variablit, që ju, duke filluar justifikim me-- vlerën e variablit 88 00:04:19,110 --> 00:04:20,064 që e keni emrin. 89 00:04:20,064 --> 00:04:23,230 Nëse doni të dini vlerat e çdo lokal ndryshueshme arritshme nga ku 90 00:04:23,230 --> 00:04:25,970 ju tani jeni në tuaj program, ju mund të shtypni vendasit info. 91 00:04:25,970 --> 00:04:28,332 Kjo është një shumë më shpejt se shtypni p dhe pastaj çfarëdo, 92 00:04:28,332 --> 00:04:30,540 renditur nga të gjithë të Variablat që ju e dini ekzistojnë. 93 00:04:30,540 --> 00:04:34,370 Ju mund të shtypni vendasit info, dhe ajo do të shtypura nga gjithçka për ju. 94 00:04:34,370 --> 00:04:37,770 Tjetra është bt, i cili është shkurtër për Back Trace. 95 00:04:37,770 --> 00:04:41,680 Tani, në përgjithësi, veçanërisht në fillim të CS50, 96 00:04:41,680 --> 00:04:44,450 ju nuk do të vërtetë kanë rastin për të përdorur BT, apo prapa gjurmë, 97 00:04:44,450 --> 00:04:47,860 sepse ju nuk jeni të paturit e funksioneve që e quajnë funksione të tjera. 98 00:04:47,860 --> 00:04:50,450 >> Ju mund të keni call kryesore e një funksion, por kjo është ndoshta ajo. 99 00:04:50,450 --> 00:04:53,199 Ju nuk keni atë funksion tjetër duke e quajtur një tjetër funksion, i cili 100 00:04:53,199 --> 00:04:54,880 e quan një funksion tjetër, dhe kështu me radhë. 101 00:04:54,880 --> 00:04:57,550 Por si programet tuaja të merrni më shumë komplekse, dhe veçanërisht 102 00:04:57,550 --> 00:05:00,290 kur ju filloni duke punuar me recursion, gjurmë prapa 103 00:05:00,290 --> 00:05:05,150 mund të jetë një mënyrë të vërtetë të dobishme për të ju lloj i marrë disa kontekst për ku 104 00:05:05,150 --> 00:05:06,460 Unë jam në programin tim. 105 00:05:06,460 --> 00:05:10,590 Pra, thonë se ju keni shkruar kodin tuaj, dhe ju e dini se kryesore quan një funksion 106 00:05:10,590 --> 00:05:14,720 f, e cila e quan një funksion G, e cila e quan një h funksion. 107 00:05:14,720 --> 00:05:17,650 Pra, ne kemi disa shtresa e shturë ndodh këtu. 108 00:05:17,650 --> 00:05:19,440 >> Nëse ju jeni në brendësi të mjedisin tuaj Gdb, 109 00:05:19,440 --> 00:05:21,640 dhe ju e dini se brenda tuaj eh, por ju të harrojmë 110 00:05:21,640 --> 00:05:27,210 lidhje me atë që ju mori për të ku ju are-- ju mund të shtypni BT, ose gjurmë prapa, 111 00:05:27,210 --> 00:05:32,370 dhe ajo do të shtypura nga h, g, f kryesor, së bashku me disa informacione të tjera, të cilat 112 00:05:32,370 --> 00:05:35,984 ju jep një çelës që, kryesor OK quajtur f, f quajtur g, g quajtur h, 113 00:05:35,984 --> 00:05:37,900 dhe kjo është ajo ku unë aktualisht jam në programin tim. 114 00:05:37,900 --> 00:05:41,380 Pra, ajo mund të jetë vërtetë e dobishme, sidomos si fshehtë kep e GDB 115 00:05:41,380 --> 00:05:45,667 bëhet pak e madhe, për të të gjetur saktësisht se ku gjërat janë. 116 00:05:45,667 --> 00:05:48,500 Së fundi, kur programi juaj është bërë, ose kur ju jeni bërë debugging atë 117 00:05:48,500 --> 00:05:50,125 dhe ju doni për të hap larg nga mjedisi gdb, 118 00:05:50,125 --> 00:05:51,940 ajo ndihmon të dini se si për të marrë nga ajo. 119 00:05:51,940 --> 00:05:55,500 Ju mund të shtypni q, ose Quit, për të marrë jashtë. 120 00:05:55,500 --> 00:05:59,220 Tani, para se video e sotme Kam përgatitur një program buggy 121 00:05:59,220 --> 00:06:03,900 quajtur buggy1, që unë hartuar nga një skedar i njohur si buggy1.c. 122 00:06:03,900 --> 00:06:06,500 Si mund të presin, kjo Programi është në buggy fakt. 123 00:06:06,500 --> 00:06:08,990 Diçka shkon keq kur unë të përpiqet dhe të drejtuar atë. 124 00:06:08,990 --> 00:06:13,014 Tani, për fat të keq, unë pa dashje fshihet dosjen time buggy1.c, 125 00:06:13,014 --> 00:06:15,930 kështu që në mënyrë për mua që të kuptoj se çfarë po ndodh gabuar me këtë program, 126 00:06:15,930 --> 00:06:18,770 Unë do të duhet të përdorni GDB lloj i verbërisht, duke u përpjekur 127 00:06:18,770 --> 00:06:22,372 për të lundruar nëpër këtë program për kuptoj se saktësisht se çfarë po ndodh gabuar. 128 00:06:22,372 --> 00:06:24,580 Por duke përdorur vetëm mjetet kemi mësuar tashmë rreth, 129 00:06:24,580 --> 00:06:27,700 ne mund të pretty much figurë pikërisht atë që është. 130 00:06:27,700 --> 00:06:30,740 Pra, le të kryesojë mbi të CS50 IDE dhe të kenë një vështrim. 131 00:06:30,740 --> 00:06:33,155 OK, kështu që ne jemi këtu në time CS50 mjedis IDE, 132 00:06:33,155 --> 00:06:35,697 dhe unë do të zoom në pak kështu që ju mund të shihni një pak më shumë. 133 00:06:35,697 --> 00:06:38,530 Në dritaren time terminal, në qoftë se unë lista përmbajtja e drejtorit tim aktual 134 00:06:38,530 --> 00:06:41,250 me ls, ne do të shohim që unë kanë disa fotografi burim 135 00:06:41,250 --> 00:06:44,982 këtu, duke përfshirë diskutuar më parë buggy1. 136 00:06:44,982 --> 00:06:46,940 Çfarë saktësisht ndodh kur Unë të përpiqet dhe të drejtuar buggy1. 137 00:06:46,940 --> 00:06:47,773 E pra, le të gjetur jashtë. 138 00:06:47,773 --> 00:06:52,510 Unë lloji dot plagë, buggy, dhe unë hit Enter. 139 00:06:52,510 --> 00:06:53,670 >> Gabimet segmentimit. 140 00:06:53,670 --> 00:06:55,000 Kjo nuk është e mirë. 141 00:06:55,000 --> 00:06:57,180 Nëse ju kujtohet, një faji segmentimit në mënyrë tipike 142 00:06:57,180 --> 00:07:01,540 ndodh kur ne Access Memory se ne nuk jeni i lejuar për të prekur. 143 00:07:01,540 --> 00:07:03,820 Ne kemi arritur disi jashtë kufijve 144 00:07:03,820 --> 00:07:05,995 e asaj programit, përpilues, na ka dhënë. 145 00:07:05,995 --> 00:07:08,310 Dhe kështu tashmë kjo është një çelës për të mbajtur në Toolbox 146 00:07:08,310 --> 00:07:10,660 si ne të fillojnë procesin debugging. 147 00:07:10,660 --> 00:07:13,620 Diçka ka shkuar një gabim të vogël këtu. 148 00:07:13,620 --> 00:07:15,935 >> Të gjithë të drejtë, kështu që le të fillojë deri mjedisin gdb 149 00:07:15,935 --> 00:07:19,030 dhe të shohim nëse ne mund të kuptoj se çfarë saktësisht problemi është. 150 00:07:19,030 --> 00:07:21,674 Unë jam duke shkuar për të pastruar ekranin tim, dhe unë jam duke shkuar për të tipit GDB 151 00:07:21,674 --> 00:07:24,340 përsëri, për të hyrë në mjedisin GDB, dhe emrin e programit 152 00:07:24,340 --> 00:07:27,450 që unë dua të korrigjoj, buggy1. 153 00:07:27,450 --> 00:07:30,182 Ne kemi marrë një mesazh të vogël, duke lexuar simbolet nga buggy1, bërë. 154 00:07:30,182 --> 00:07:32,390 E gjithë kjo do të thotë është e tërhequr së bashku të gjithë kodit, 155 00:07:32,390 --> 00:07:35,570 dhe tani ajo është e ngarkuar në GDB, dhe është gati për të shkuar. 156 00:07:35,570 --> 00:07:37,140 >> Tani, çfarë unë dua të bëj? 157 00:07:37,140 --> 00:07:39,130 A ju kujtohet çfarë Hapi i parë zakonisht është 158 00:07:39,130 --> 00:07:42,540 pasi unë jam brenda këtij mjedisi? 159 00:07:42,540 --> 00:07:44,540 Shpresojmë, ju seti një pikë pushim, sepse 160 00:07:44,540 --> 00:07:46,240 në fakt kjo është ajo që unë dua të bëj. 161 00:07:46,240 --> 00:07:47,990 Tani, unë nuk kam kodi burim për këtë 162 00:07:47,990 --> 00:07:50,948 para meje, e cila është ndoshta nuk është rasti përdorimi tipik, nga rruga. 163 00:07:50,948 --> 00:07:52,055 Ju ndoshta do. 164 00:07:52,055 --> 00:07:52,680 Pra, kjo është e mirë. 165 00:07:52,680 --> 00:07:55,790 Por, duke supozuar që ju nuk e bëni, çfarë është një funksion që ju e dini 166 00:07:55,790 --> 00:07:58,880 ekziston në çdo program të vetëm C? 167 00:07:58,880 --> 00:08:04,420 Pa marrë parasysh sa e madhe apo sa e komplikuar ajo është, ky funksion definitivisht ekziston. 168 00:08:04,420 --> 00:08:05,440 Kryesore, e drejtë? 169 00:08:05,440 --> 00:08:08,870 >> Pra, në mungesë të çdo gjë tjetër, ne mund të vendosur një pikë pushim në kryesore. 170 00:08:08,870 --> 00:08:12,200 Dhe përsëri, unë mund vetëm lloji thyejnë kryesor, në vend të b. 171 00:08:12,200 --> 00:08:14,650 Dhe në qoftë se ju jeni kurioz, nëse ju ndonjëherë shkruani një komandë të gjatë 172 00:08:14,650 --> 00:08:16,800 dhe pastaj të kuptojë se ju typed gjë të gabuar, 173 00:08:16,800 --> 00:08:18,770 dhe ju doni të merrni shpëtoj të gjithë si unë vetëm e bëri, 174 00:08:18,770 --> 00:08:22,029 ju mund të marrë kontrollin U, e cila do të fshini çdo gjë dhe do t'ju çoj përsëri 175 00:08:22,029 --> 00:08:23,570 në fillim të vijave kursorit. 176 00:08:23,570 --> 00:08:26,569 Një shumë më shpejt se vetëm të mbajë poshtë fshini, apo goditur atë një herë bandë 177 00:08:26,569 --> 00:08:27,080 mbi. 178 00:08:27,080 --> 00:08:28,740 >> Pra, ne do të caktojë një pikë pushim në kryesore. 179 00:08:28,740 --> 00:08:32,970 Dhe si ju mund të shihni, ajo thotë se ne kemi vendosur një pikë pushim në fotografi buggy1.c, 180 00:08:32,970 --> 00:08:36,330 dhe me sa duket rreshtin e parë e kodit të kryesor është linjë shtatë. 181 00:08:36,330 --> 00:08:38,080 Përsëri, ne nuk kemi fotografi burim këtu, 182 00:08:38,080 --> 00:08:40,429 por unë do të supozojmë se kjo është thënë mua të vërtetën. 183 00:08:40,429 --> 00:08:44,510 Dhe pastaj, unë jam vetëm duke u përpjekur dhe drejtuar programin, r. 184 00:08:44,510 --> 00:08:45,360 Duke filluar programin. 185 00:08:45,360 --> 00:08:48,160 Të gjithë të drejtë, kështu që ky mesazh është pak i fshehtë. 186 00:08:48,160 --> 00:08:50,160 Por në thelb ajo që është ndodh këtu është se është vetëm 187 00:08:50,160 --> 00:08:53,350 thënë mua unë kam goditur pushim tim pikë, break pika numër 1. 188 00:08:53,350 --> 00:08:55,877 >> Dhe pastaj, kjo linjë e kodit, nuk ka fotografi të tilla ose directory. 189 00:08:55,877 --> 00:08:57,710 Arsyeja e vetme që Unë jam duke parë këtë mesazh 190 00:08:57,710 --> 00:09:00,800 është për shkak se unë pa dashje fshihet dosjen time buggy.c. 191 00:09:00,800 --> 00:09:04,050 Nëse dosja ime buggy1.c ekzistuar në dosjen aktuale, 192 00:09:04,050 --> 00:09:06,920 kjo e drejtë nuk do të vijë në fakt më tregoni se çfarë linjë e kodit 193 00:09:06,920 --> 00:09:08,214 fjalë për fjalë lexon. 194 00:09:08,214 --> 00:09:09,380 Për fat të keq, unë fshihet ajo. 195 00:09:09,380 --> 00:09:14,790 Ne do të duhet të lloj të lundruar përmes kësaj pak më verbërisht. 196 00:09:14,790 --> 00:09:17,330 >> OK, kështu që le të shohim, çfarë dua të bëj këtu? 197 00:09:17,330 --> 00:09:21,770 E pra, unë do të doja të di se çfarë lokale Variablat ndoshta janë në dispozicion për mua. 198 00:09:21,770 --> 00:09:23,570 Unë kam filluar programin tim. 199 00:09:23,570 --> 00:09:28,515 Le të shohim se çfarë mund të jetë tashmë initialized për ne. 200 00:09:28,515 --> 00:09:31,430 Unë lloji vendasit info, asnjë vendasit. 201 00:09:31,430 --> 00:09:33,960 Të gjithë të drejtë, kështu që nuk ka më jepni një ton të informacionit. 202 00:09:33,960 --> 00:09:37,600 Unë mund të provoni dhe të shtypura nga një ndryshore, por unë nuk e di ndonjë emrat e ndryshueshme. 203 00:09:37,600 --> 00:09:39,930 Unë mund të provoni një gjurmë prapa, por unë jam brenda kryesor, 204 00:09:39,930 --> 00:09:43,710 kështu që unë e di unë nuk e kam bërë një tjetër telefonatë funksion tani. 205 00:09:43,710 --> 00:09:47,710 >> Pra, duket si mundësitë e mia janë vetëm për të përdorur n apo më shumë dhe të fillojnë të zhyten në. 206 00:09:47,710 --> 00:09:49,630 Unë jam duke shkuar për të përdorur n. 207 00:09:49,630 --> 00:09:51,180 Kështu që unë lloji n. 208 00:09:51,180 --> 00:09:53,060 Oh my gosh, çfarë po ndodh këtu. 209 00:09:53,060 --> 00:09:56,260 Programi ka marrë sinjale, Faji SIGSEGV segmentimit, 210 00:09:56,260 --> 00:09:57,880 dhe pastaj një bandë e tërë e gjëra. 211 00:09:57,880 --> 00:09:58,880 Unë jam tashmë të tronditur. 212 00:09:58,880 --> 00:10:00,980 E pra, ka në fakt një shumë për të mësuar këtu. 213 00:10:00,980 --> 00:10:02,520 Pra, çfarë na thotë kjo? 214 00:10:02,520 --> 00:10:09,180 Çfarë na tregon kjo është, ky program është për të, por nuk ka akoma, faji seg. 215 00:10:09,180 --> 00:10:12,550 Dhe në mënyrë të veçantë, unë jam duke shkuar për të zmadhuar edhe më tej këtu, 216 00:10:12,550 --> 00:10:18,980 është gati seg fajin për diçka që quhet strcmp. 217 00:10:18,980 --> 00:10:22,705 >> Tani, ne nuk mund të kemi diskutuar ky funksion gjerësisht. 218 00:10:22,705 --> 00:10:25,580 Por kjo is-- sepse ne nuk jemi duke shkuar për të folur në lidhje me çdo funksion që 219 00:10:25,580 --> 00:10:28,610 ekziston në standardin C library-- por ata janë të gjithë në dispozicion për ju, 220 00:10:28,610 --> 00:10:32,110 veçanërisht nëse ju merrni një shikoni në reference.cs50.net. 221 00:10:32,110 --> 00:10:35,000 Dhe strcmp është një të vërtetë të fuqishme Funksioni që ekziston brenda 222 00:10:35,000 --> 00:10:38,070 i header string skedë, e cila është një header 223 00:10:38,070 --> 00:10:41,970 fotografi që është i përkushtuar për funksionet që punojnë me dhe manipuluar vargjet. 224 00:10:41,970 --> 00:10:49,830 >> Dhe në mënyrë të veçantë, ajo që bën është strcmp ajo krahason vlerat e dy vargjet. 225 00:10:49,830 --> 00:10:54,160 Kështu që unë jam gati të Segmentimi faj në një telefonatë për të strcmp duket. 226 00:10:54,160 --> 00:10:58,530 I goditi n, dhe në fakt kam marrë mesazhin, Programi përfundoi me SIGSEGV sinjal 227 00:10:58,530 --> 00:11:01,370 faji segmentimit. Pra tani Unë në fakt kam fajësuar seg, 228 00:11:01,370 --> 00:11:06,479 dhe programi im ka mjaft shumë i dhënë në mënyrë efektive. 229 00:11:06,479 --> 00:11:07,770 Ky është fundi i programit. 230 00:11:07,770 --> 00:11:10,370 Ajo u ndërprenë, ai u rrëzua. 231 00:11:10,370 --> 00:11:14,740 Pra, nuk ishte shumë, por unë në fakt e bëri të mësojnë mjaft 232 00:11:14,740 --> 00:11:16,747 nga kjo përvojë pak. 233 00:11:16,747 --> 00:11:17,580 Çfarë kam mësuar? 234 00:11:17,580 --> 00:11:22,020 E pra, programi im crashes pretty much menjëherë. 235 00:11:22,020 --> 00:11:26,300 Programi im crashes në një thirrje për strcmp, por unë 236 00:11:26,300 --> 00:11:30,560 nuk kanë ndonjë variablave lokale në tim Programi në atë kohë që nuk punon. 237 00:11:30,560 --> 00:11:37,320 Pra, çfarë string, ose vargjet, Unë ndoshta mund të jetë krahasuar. 238 00:11:37,320 --> 00:11:42,140 Nëse unë nuk kam ndonjë lokal variabla, ju mund të 239 00:11:42,140 --> 00:11:45,520 marr me mend se unë have-- ka ndoshta një globale variabel, e cila mund të jetë e vërtetë. 240 00:11:45,520 --> 00:11:47,670 >> Por në përgjithësi, duket si unë jam krahasuar 241 00:11:47,670 --> 00:11:52,070 për diçka që nuk ekziston. 242 00:11:52,070 --> 00:11:54,130 Pra, le të hetojë që pak më tej. 243 00:11:54,130 --> 00:11:55,120 Kështu që unë jam duke shkuar për të pastruar ekranin tim. 244 00:11:55,120 --> 00:11:57,536 Unë jam duke shkuar për të lënë jashtë nga Mjedisi GDB për një të dytë. 245 00:11:57,536 --> 00:12:01,300 Dhe unë jam duke menduar, OK, kështu që nuk ka nuk ka ndryshore lokale në programin tim. 246 00:12:01,300 --> 00:12:06,444 Pyes veten në qoftë se ndoshta unë jam duke menduar për të kaluar në një varg si një argument command line. 247 00:12:06,444 --> 00:12:07,610 Pra, le të vetëm të provoni këtë. 248 00:12:07,610 --> 00:12:09,020 Unë nuk e kanë bërë këtë më parë. 249 00:12:09,020 --> 00:12:14,244 >> Le të shohim nëse ndoshta nëse unë të drejtuar këtë program me një argument command line ajo punon. 250 00:12:14,244 --> 00:12:16,140 Huh, jo faji segmentimit atje. 251 00:12:16,140 --> 00:12:17,870 Ajo vetëm më tha se unë i realizuar artistikisht it out. 252 00:12:17,870 --> 00:12:19,170 Pra, ndoshta kjo është fix këtu. 253 00:12:19,170 --> 00:12:27,560 Dhe me të vërtetë, në qoftë se unë kthehem dhe të shikojmë në kodi aktual burim për buggy1.c, 254 00:12:27,560 --> 00:12:31,180 duket sikur ajo që unë jam duke bërë është Unë jam duke e bërë një telefonatë të strcmp pa 255 00:12:31,180 --> 00:12:34,010 kontrolluar nëse në fakt argv [1] ekziston. 256 00:12:34,010 --> 00:12:36,730 Kjo është në fakt kodin burim për buggy1.c. 257 00:12:36,730 --> 00:12:38,855 Pra, ajo që unë me të vërtetë nevojë për të bëjmë këtu për të rregulluar programin tim, 258 00:12:38,855 --> 00:12:40,835 duke supozuar unë kam paraqesë para meje, është 259 00:12:40,835 --> 00:12:44,740 për të vetëm të shtoni një kontroll për të bërë sigurt se argc është e barabartë me 2. 260 00:12:44,740 --> 00:12:47,780 Pra ky shembull, përsëri, si i tha, është pak ndërtuar, e drejtë? 261 00:12:47,780 --> 00:12:49,840 Ju jeni në përgjithësi nuk do të aksidentalisht fshini kodin tuaj burim 262 00:12:49,840 --> 00:12:51,820 dhe pastaj duhet të provoni dhe debug programin. 263 00:12:51,820 --> 00:12:53,120 Por shpresojmë se, ajo i dha ju një ilustrim 264 00:12:53,120 --> 00:12:55,120 nga llojet e gjërave që ju mund të jetë duke menduar për 265 00:12:55,120 --> 00:12:56,610 si ju jeni debugging programin tuaj. 266 00:12:56,610 --> 00:12:58,760 >> Çfarë është gjendja e punëve këtu? 267 00:12:58,760 --> 00:13:00,510 Çfarë variabla bëjë unë duhet të arritshme për mua? 268 00:13:00,510 --> 00:13:03,600 Ku pikërisht është programi im crashing, në atë linjë, 269 00:13:03,600 --> 00:13:05,240 në atë thirrje për çfarë funksioni? 270 00:13:05,240 --> 00:13:06,952 Çfarë lloj të dhëna që nuk më jep mua? 271 00:13:06,952 --> 00:13:08,910 Dhe kjo është pikërisht lloj mendim që ju 272 00:13:08,910 --> 00:13:12,820 duhet të marrë në kur ju jeni duke menduar për debugging programet tuaja. 273 00:13:12,820 --> 00:13:13,820 >> Unë jam Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 Kjo është CS50. 275 00:13:16,140 --> 00:15:08,642