1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> Doug LLOYD: Labi GDB. 3 00:00:06,830 --> 00:00:08,480 Kas tas ir tieši tā? 4 00:00:08,480 --> 00:00:11,310 Tātad GDB, kas apzīmē par GNU atkļūdotājs 5 00:00:11,310 --> 00:00:15,040 ir patiešām lielisks rīks, ka mēs varam izmantot, lai palīdzētu mums atkļūdot savas programmas, 6 00:00:15,040 --> 00:00:18,210 vai uzzināt, kur lietas ir notiek nepareizi mūsu programmās. 7 00:00:18,210 --> 00:00:22,590 GDB ir pārsteidzoši spēcīgs, bet izejas un mijiedarbība ar to 8 00:00:22,590 --> 00:00:23,830 var būt mazliet mistisks. 9 00:00:23,830 --> 00:00:28,210 Tas parasti ir komandrindas rīks, un tas var mest daudz ziņu pie jums. 10 00:00:28,210 --> 00:00:31,144 Un tas var veida grūti apstrādāt tieši to, kas notiek. 11 00:00:31,144 --> 00:00:33,560 Par laimi, mēs esam spēruši soļus lai atrisinātu šo problēmu, lai jūs 12 00:00:33,560 --> 00:00:36,281 kā jūs strādājat ar CS50. 13 00:00:36,281 --> 00:00:39,030 Ja jūs neizmantojat grafisko atkļūdotājs, kas mans kolēģis Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse ir runājis diezgan mazliet par šajā video, kas 15 00:00:41,570 --> 00:00:44,740 vajadzētu būt vairāk nekā šeit tieši tagad, jums var būt nepieciešams 16 00:00:44,740 --> 00:00:48,270 izmantot šos komandrindas instrumenti darbam ar GDB. 17 00:00:48,270 --> 00:00:51,250 Ja jūs strādājat ar CS50 IDE, jums nav nepieciešams, lai to paveiktu. 18 00:00:51,250 --> 00:00:53,550 Bet, ja jūs neesat strādā CS50 IDE, 19 00:00:53,550 --> 00:00:55,750 varbūt izmantojot versiju no CS50 Appliance, 20 00:00:55,750 --> 00:00:58,860 vai citu Linux darbojas sistēma ar GDB uzstādīts uz tā, 21 00:00:58,860 --> 00:01:00,980 Jums var būt nepieciešams izmantot šie komandrindas rīkus. 22 00:01:00,980 --> 00:01:02,860 >> Un tā kā jūs varētu ir to darīt, tas ir 23 00:01:02,860 --> 00:01:06,280 noderīga tikai, lai saprastu, kā GDB darbi no komandrindas. 24 00:01:06,280 --> 00:01:09,650 Bet atkal, ja jūs esat izmantojot CS50 IDE, jūs 25 00:01:09,650 --> 00:01:15,400 var izmantot grafisko atkļūdotājs kas ir iebūvēts IDE. 26 00:01:15,400 --> 00:01:18,750 Tātad, lai iegūtu lietas notiek ar GDB, lai sāktu debugging 27 00:01:18,750 --> 00:01:21,220 process īpaši programma, viss, kas jums jādara, 28 00:01:21,220 --> 00:01:23,810 ir veids GDB seko ar programmas nosaukumu. 29 00:01:23,810 --> 00:01:28,620 Tā, piemēram, ja jūsu programma ir sveiki, jūs varētu rakstīt GDB Sveiki. 30 00:01:28,620 --> 00:01:31,210 >> Kad jūs to izdarītu, jūs gatavojas uzvilkt gdb vidi. 31 00:01:31,210 --> 00:01:33,800 Jūsu tūlītēja mainīsies, un tā vietā, ko tas parasti 32 00:01:33,800 --> 00:01:35,841 ir tad, kad jūs tipa lietas Komandu line-- ls, 33 00:01:35,841 --> 00:01:38,115 cd-- visas jūsu tipiskā Linux komandas, jūsu tūlītēju 34 00:01:38,115 --> 00:01:42,200 mainīsies uz kuru, visticamāk, kaut līdzīgi iekavās GDB iekavās. 35 00:01:42,200 --> 00:01:46,630 Tas ir jūsu jaunā GDB ātru, jo tu esi iekšā GDB vidē. 36 00:01:46,630 --> 00:01:49,830 Kad iekšā šajā vidē, tur ir divi galvenie komandas 37 00:01:49,830 --> 00:01:52,290 ka jūs, iespējams izmantot šādā secībā. 38 00:01:52,290 --> 00:01:55,200 >> Pirmais ir b, kas ir īss pārtraukums. 39 00:01:55,200 --> 00:01:58,690 Un pēc tam, kad B tipa, jūs parasti ierakstiet nosaukumu funkcijai 40 00:01:58,690 --> 00:02:01,040 vai, ja jūs notikt zināt ap ko līnijas numurs 41 00:02:01,040 --> 00:02:04,100 jūsu programma sāk uzvesties mazliet dīvaini, 42 00:02:04,100 --> 00:02:06,370 Jūs varat ierakstīt līniju skaits tur kā labi. 43 00:02:06,370 --> 00:02:09,660 Kas b, vai pārtraukums, vai tas ļauj jūsu programma 44 00:02:09,660 --> 00:02:13,270 palaist līdz noteiktam punktam, proti, nosaukums funkcijas 45 00:02:13,270 --> 00:02:15,880 ka jūs norādāt vai līnija jūsu norādīto numuru. 46 00:02:15,880 --> 00:02:18,590 >> Un tajā brīdī, to būs iesaldēt izpildi. 47 00:02:18,590 --> 00:02:21,670 Tas ir tiešām laba lieta, jo tiklīdz izpilde ir iesaldēti, 48 00:02:21,670 --> 00:02:25,214 Jūs varat sākt ļoti lēni soli pa savu programmu. 49 00:02:25,214 --> 00:02:28,130 Parasti, ja jūs esat bijis rādīt savas programmas, viņi diezgan īss. 50 00:02:28,130 --> 00:02:31,250 Parasti, rakstot dot slīpsvītru neatkarīgi nosaukums jūsu programmas, hit Enter, 51 00:02:31,250 --> 00:02:33,470 un pirms jūs varat mirgot, jūsu Programma jau ir pabeigta. 52 00:02:33,470 --> 00:02:36,620 Tas nav īsti daudz laika, lai mēģinātu un saprast, kas notiek nepareizi. 53 00:02:36,620 --> 00:02:40,920 Tātad, tas tiešām varētu palēnināt lietas pa nosakot lūzuma punkts ar B, 54 00:02:40,920 --> 00:02:43,040 un tad ienāk. 55 00:02:43,040 --> 00:02:46,169 >> Pēc tam, kad esat iestatījis jūsu pārtraukuma punktu, jūs varat palaist programmu. 56 00:02:46,169 --> 00:02:47,960 Un, ja jums ir kāds komandrindas argumentus, 57 00:02:47,960 --> 00:02:51,610 norādāt tos šeit, nevis tad, kad Rakstot gdb jūsu programma vārds. 58 00:02:51,610 --> 00:02:55,980 Jūs norādāt visus komandrindas argumenti ņemot R, vai skriet, 59 00:02:55,980 --> 00:03:00,270 un tad kāds komandrindas argumentus Jums nepieciešams iekšpusē jūsu programmā. 60 00:03:00,270 --> 00:03:03,510 Ir vairāki citi patiešām svarīgas un noderīgas komandas 61 00:03:03,510 --> 00:03:04,970 iekšpusē IKP vidi. 62 00:03:04,970 --> 00:03:07,540 Tāpēc ļaujiet man tikai ātri iet pār daži no tiem. 63 00:03:07,540 --> 00:03:11,320 >> Pirmais ir n, kas ir īss nākamajā, un jūs varat rakstīt nākamo, nevis n, 64 00:03:11,320 --> 00:03:12,304 abi varētu strādāt. 65 00:03:12,304 --> 00:03:13,470 Un tas ir tikai stenogrāfija. 66 00:03:13,470 --> 00:03:17,540 Un, kā jūs droši vien jau gotten izmanto, lai, to var ievadīt lietas 67 00:03:17,540 --> 00:03:20,520 īsāks parasti ir labāk. 68 00:03:20,520 --> 00:03:24,100 Un kas tas būs jādara, ir tas būs solis uz priekšu vienu bloku kodu. 69 00:03:24,100 --> 00:03:26,170 Tātad tas būs virzīties uz priekšu līdz funkciju zvanu. 70 00:03:26,170 --> 00:03:28,350 Un tad tā vietā, iegremdēšanās šīs funkcijas 71 00:03:28,350 --> 00:03:33,130 un iet cauri visiem, kas darbojas kods, tas vienkārši ir funkcija. 72 00:03:33,130 --> 00:03:34,400 >> Funkcija tiks saukts. 73 00:03:34,400 --> 00:03:35,733 To darīs neatkarīgi no tās darbs ir. 74 00:03:35,733 --> 00:03:38,870 Tas atgriezīs vērtību funkcija, kas to nosauca. 75 00:03:38,870 --> 00:03:42,490 Un tad jums būs pāriet uz Nākamais rindā šī zvana funkcijas. 76 00:03:42,490 --> 00:03:44,555 Ja jūs vēlaties, lai soli iekšpusē funkciju, 77 00:03:44,555 --> 00:03:46,430 nevis tikai ņemot tas izpildīt, jo īpaši 78 00:03:46,430 --> 00:03:50,004 ja jūs domājat, ka problēma varētu gulēt iekšpusē šo funkciju, 79 00:03:50,004 --> 00:03:52,670 jūs varētu, protams, ir noteikts pārtraukums punktu iekšpusē šo funkciju. 80 00:03:52,670 --> 00:03:57,820 Vai, ja jūs jau darbojas, jūs varat Ar S solis uz priekšu, vienu rindiņu kodu. 81 00:03:57,820 --> 00:04:01,170 >> Tātad tas būs solis un nirt funkcijām, 82 00:04:01,170 --> 00:04:04,750 nevis vienkārši ir izpildīt un turpinot ar funkciju 83 00:04:04,750 --> 00:04:07,380 ka tu esi debugging. 84 00:04:07,380 --> 00:04:09,870 Ja jūs kādreiz vēlaties zināt vērtība ir mainīgs, 85 00:04:09,870 --> 00:04:12,507 Jūs varat ierakstīt P, vai Print, un pēc tam mainīgā vārds. 86 00:04:12,507 --> 00:04:15,090 Un tas būs drukāt, lai jums, iekšpusē GDB vides, 87 00:04:15,090 --> 00:04:19,110 nosaukums mainīgo, ka you-- atvainojiet me-- vērtību mainīgā 88 00:04:19,110 --> 00:04:20,064 ka jūs esat nosaukts. 89 00:04:20,064 --> 00:04:23,230 Ja jūs vēlaties zināt vērtības ik vietējās mainīgais pieejama no kurienes 90 00:04:23,230 --> 00:04:25,970 Jums šobrīd ir jūsu programma, jūs varat ierakstīt info vietējie. 91 00:04:25,970 --> 00:04:28,332 Tas ir daudz ātrāk nekā ierakstot p un tad kāds, 92 00:04:28,332 --> 00:04:30,540 uzskaitot, visas mainīgie, ka jūs zināt pastāv. 93 00:04:30,540 --> 00:04:34,370 Jūs varat ierakstīt info vietējie, un tas būs izdrukāt visu, lai jums. 94 00:04:34,370 --> 00:04:37,770 Blakus up ir bt, kas ir īss Back Trace. 95 00:04:37,770 --> 00:04:41,680 Tagad, parasti, jo sākumā CS50, 96 00:04:41,680 --> 00:04:44,450 jums nav īsti ir izdevība izmantot BT, vai mugurā Trace, 97 00:04:44,450 --> 00:04:47,860 jo jums ir ne funkcijas ka zvanu citas funkcijas. 98 00:04:47,860 --> 00:04:50,450 >> Jums varētu būt galvenais piezvanītu funkcija, bet tas ir iespējams, tas. 99 00:04:50,450 --> 00:04:53,199 Jums nav, ka citas funkcijas zvana citu funkciju, kas 100 00:04:53,199 --> 00:04:54,880 aicina citu funkciju, un tā tālāk. 101 00:04:54,880 --> 00:04:57,550 Bet, tā kā jūsu programmas iegūtu vairāk sarežģīts, un jo īpaši 102 00:04:57,550 --> 00:05:00,290 kad sākat strādāt ar recursion, muguras izsekot 103 00:05:00,290 --> 00:05:05,150 var būt patiešām noderīgs veids, lai jūs veida dabūt kontekstu, kurā 104 00:05:05,150 --> 00:05:06,460 Es esmu savā programmā. 105 00:05:06,460 --> 00:05:10,590 Tā teikt, jūs esat rakstiski savu kodu, un jūs zināt, ka galvenais zvani funkciju 106 00:05:10,590 --> 00:05:14,720 f, kas aicina funkciju g, kas aicina funkciju h. 107 00:05:14,720 --> 00:05:17,650 Tāpēc mums ir vairāki slāņi ligzdojošo notiek šeit. 108 00:05:17,650 --> 00:05:19,440 >> Ja jūs esat iekšpusē Jūsu GDB vide, 109 00:05:19,440 --> 00:05:21,640 un jūs zināt jūsu iekšpusi H, bet esat aizmirsis 110 00:05:21,640 --> 00:05:27,210 par to, kas ieguva jums, kur jūs are-- jūs varat ierakstīt BT, vai atpakaļ pēdas, 111 00:05:27,210 --> 00:05:32,370 un tas būs izdrukāt h, g, f galvenais, līdzās kādu citu informāciju, kas 112 00:05:32,370 --> 00:05:35,984 dod jums pavediens, ka OK galvenā sauc f, f, ko sauc par g, g sauc h, 113 00:05:35,984 --> 00:05:37,900 un tas, kur es Pašlaik esmu manā programmā. 114 00:05:37,900 --> 00:05:41,380 Tātad tas var būt patiesi noderīga, jo īpaši tādēļ, ka mistisks-Ness GDB 115 00:05:41,380 --> 00:05:45,667 kļūst mazliet milzīgs, lai uzzināt, kur tieši lietas. 116 00:05:45,667 --> 00:05:48,500 Visbeidzot, ja jūsu programma tiek darīts, vai tad, kad jūs esat darījuši to atkļūdošana 117 00:05:48,500 --> 00:05:50,125 un jūs vēlaties, lai soli prom No GDB vidē, 118 00:05:50,125 --> 00:05:51,940 tas palīdz uzzināt, kā izkļūt no tā. 119 00:05:51,940 --> 00:05:55,500 Jūs varat ierakstīt q, vai Iziet, lai izkļūt. 120 00:05:55,500 --> 00:05:59,220 Tagad, pirms šodienas video Es sagatavojis buggy programmu 121 00:05:59,220 --> 00:06:03,900 sauc buggy1, kuru es apkopoti no faila pazīstams kā buggy1.c. 122 00:06:03,900 --> 00:06:06,500 Kā jūs varētu gaidīt, tas Programma ir faktiski buggy. 123 00:06:06,500 --> 00:06:08,990 Kaut kas noiet greizi kad mēģinu un palaist to. 124 00:06:08,990 --> 00:06:13,014 Tagad, diemžēl, es nejauši svītrots manu buggy1.c failu, 125 00:06:13,014 --> 00:06:15,930 tāpēc, lai man, lai noskaidrotu kas notiek nepareizi ar šo programmu, 126 00:06:15,930 --> 00:06:18,770 Es esmu nāksies izmantot GDB veida akli, mēģinot 127 00:06:18,770 --> 00:06:22,372 lai virzītos caur šo programmu, lai izdomāt tieši to, kas notiek nepareizi. 128 00:06:22,372 --> 00:06:24,580 Bet izmantojot tikai instrumentus mēs esam jau uzzinājām, 129 00:06:24,580 --> 00:06:27,700 mēs varam diezgan daudz attēlu , ko tieši tas ir. 130 00:06:27,700 --> 00:06:30,740 Tātad pieņemsim dodies uz CS50 IDE un paskatīties. 131 00:06:30,740 --> 00:06:33,155 Labi, tāpēc mēs esam šeit, manā CS50 IDE vide, 132 00:06:33,155 --> 00:06:35,697 un es ņemšu tuvinātu mazliet lai jūs varētu redzēt mazliet vairāk. 133 00:06:35,697 --> 00:06:38,530 Manā termināļa logā, ja es sarakstu saturs mana pašreizējā direktora 134 00:06:38,530 --> 00:06:41,250 ar ls, mēs redzēsim, ka es ir pāris avota failus 135 00:06:41,250 --> 00:06:44,982 šeit, tostarp iepriekš apspriests buggy1. 136 00:06:44,982 --> 00:06:46,940 Kas īsti notiek, kad Mēģinu un palaist buggy1. 137 00:06:46,940 --> 00:06:47,773 Nu pieņemsim uzzināt. 138 00:06:47,773 --> 00:06:52,510 I tips dot slīpsvītra, buggy, un es hit Enter. 139 00:06:52,510 --> 00:06:53,670 >> Segmentācijas kļūdas. 140 00:06:53,670 --> 00:06:55,000 Tas nav labi. 141 00:06:55,000 --> 00:06:57,180 Ja jūs atceraties, segmentāciju vaina parasti 142 00:06:57,180 --> 00:07:01,540 notiek tad, kad mēs piekļūt atmiņas ka mēs esam nav atļauts pieskarties. 143 00:07:01,540 --> 00:07:03,820 Mēs esam kaut kā sasnieguši ārpus robežām 144 00:07:03,820 --> 00:07:05,995 no tā, ko programmu, kompilators, mums ir devis. 145 00:07:05,995 --> 00:07:08,310 Un tā jau tas ir pavediens paturēt kopums 146 00:07:08,310 --> 00:07:10,660 kā mēs sāktu atkļūdošanas procesu. 147 00:07:10,660 --> 00:07:13,620 Kaut kas ir gājusi mazliet nepareizi šeit. 148 00:07:13,620 --> 00:07:15,935 >> Labi, tāpēc sāksim up GDB vidē 149 00:07:15,935 --> 00:07:19,030 un redzēt, ja mēs varam izrēķināt kas īsti ir problēma. 150 00:07:19,030 --> 00:07:21,674 Es esmu gatavojas, lai notīrītu manu ekrānu, un es esmu gatavojas rakstīt GDB 151 00:07:21,674 --> 00:07:24,340 vēlreiz, lai ievadītu gdb vidē, un programmas nosaukums 152 00:07:24,340 --> 00:07:27,450 ka es gribu, lai atkļūdot, buggy1. 153 00:07:27,450 --> 00:07:30,182 Mēs saņemt nedaudz ziņu, lasot simbolus no buggy1, darīts. 154 00:07:30,182 --> 00:07:32,390 Viss, kas nozīmē, tas velk kopā visi no koda, 155 00:07:32,390 --> 00:07:35,570 un tagad tas ir bijis iepildīta GDB, un tā ir gatava iet. 156 00:07:35,570 --> 00:07:37,140 >> Tagad, ko es gribu darīt? 157 00:07:37,140 --> 00:07:39,130 Vai jūs atceraties to, ko Pirmais solis parasti ir 158 00:07:39,130 --> 00:07:42,540 kad es esmu iekšā šajā vidē? 159 00:07:42,540 --> 00:07:44,540 Cerams, jūs teicāt iestatīt lūzuma punkts, jo 160 00:07:44,540 --> 00:07:46,240 patiesībā tas ir tas, ko es gribu darīt. 161 00:07:46,240 --> 00:07:47,990 Tagad, man nav pirmkods šī 162 00:07:47,990 --> 00:07:50,948 man priekšā, kas, iespējams, ir nav tipisks izmantošanas gadījumā, ko veidā. 163 00:07:50,948 --> 00:07:52,055 Jūs droši vien būs. 164 00:07:52,055 --> 00:07:52,680 Tātad tas ir labi. 165 00:07:52,680 --> 00:07:55,790 Bet pieņemot, ka jums nav, kas ir viena funkcija, kas jūs zināt 166 00:07:55,790 --> 00:07:58,880 pastāv katrā atsevišķā C programmu? 167 00:07:58,880 --> 00:08:04,420 Nav svarīgi, cik liels vai cik sarežģīts tas ir, šī funkcija noteikti pastāv. 168 00:08:04,420 --> 00:08:05,440 Galvenais, vai ne? 169 00:08:05,440 --> 00:08:08,870 >> Tātad ja viss cits, mēs varam noteikt lūzuma punkts pie galvenā. 170 00:08:08,870 --> 00:08:12,200 Un atkal, es varētu vienkārši ierakstiet break galvenais, tā vietā, lai b. 171 00:08:12,200 --> 00:08:14,650 Un, ja jūs esat ieinteresēti, ja jums kādreiz tipa no garu komandu 172 00:08:14,650 --> 00:08:16,800 un tad saproti, ka jums drukāti nepareizi lieta, 173 00:08:16,800 --> 00:08:18,770 un jūs vēlaties, lai atbrīvotos no visiem, jo ​​es tikko darīju, 174 00:08:18,770 --> 00:08:22,029 jūs varat veikt kontroli U, kas izdzēst visu un nest atpakaļ 175 00:08:22,029 --> 00:08:23,570 sākumam no kursora līniju. 176 00:08:23,570 --> 00:08:26,569 Daudz ātrāk nekā tikai turiet dzēst, vai hitting to ķekars reizes 177 00:08:26,569 --> 00:08:27,080 vairāk. 178 00:08:27,080 --> 00:08:28,740 >> Tātad mēs noteikt lūzuma punkts pie galvenā. 179 00:08:28,740 --> 00:08:32,970 Un, kā jūs varat redzēt, tas saka, ka mēs esam noteikt lūzuma brīdi failu buggy1.c, 180 00:08:32,970 --> 00:08:36,330 un acīmredzot pirmajā rindā no koda galvenais ir septiņi līnija. 181 00:08:36,330 --> 00:08:38,080 Atkal, mums nav avota fails šeit, 182 00:08:38,080 --> 00:08:40,429 bet es pieņemu, ka tas ir man saki patiesību. 183 00:08:40,429 --> 00:08:44,510 Un tad, es esmu tikai mēģina un palaist programmu, r. 184 00:08:44,510 --> 00:08:45,360 Sākot programmu. 185 00:08:45,360 --> 00:08:48,160 Labi, tāpēc šī ziņa ir nedaudz mistisks. 186 00:08:48,160 --> 00:08:50,160 Bet būtībā, kas ir notiek šeit ir tas ir tikai 187 00:08:50,160 --> 00:08:53,350 man saki Es esmu hit manu pārtraukuma punkts, lūzuma punkts numurs 1. 188 00:08:53,350 --> 00:08:55,877 >> Un tad, ka līnija koda, Nav tāda faila vai direktorijas. 189 00:08:55,877 --> 00:08:57,710 Vienīgais iemesls, ka Es esmu redzēt šo ziņu 190 00:08:57,710 --> 00:09:00,800 ir tāpēc, ka es nejauši svītrots manu buggy.c failu. 191 00:09:00,800 --> 00:09:04,050 Ja mans buggy1.c fails pastāvēja pašreizējā direktorijā, 192 00:09:04,050 --> 00:09:06,920 ka līnija labi tur tiešām man pateikt, kāda līnija koda 193 00:09:06,920 --> 00:09:08,214 burtiski skan. 194 00:09:08,214 --> 00:09:09,380 Diemžēl, es svītrots to. 195 00:09:09,380 --> 00:09:14,790 Mēs ejam, lai būtu sava veida orientēties caur šo nedaudz vairāk akli. 196 00:09:14,790 --> 00:09:17,330 >> Labi, tāpēc pieņemsim redzēt, ko es gribu darīt šeit? 197 00:09:17,330 --> 00:09:21,770 Nu, es gribētu zināt, ko vietējās mainīgie varbūt man ir pieejami. 198 00:09:21,770 --> 00:09:23,570 Esmu sācis savu programmu. 199 00:09:23,570 --> 00:09:28,515 Let 's redzēt, kas varētu būt jau inicializēts mums. 200 00:09:28,515 --> 00:09:31,430 I tipa Info vietējiem iedzīvotājiem, nav vietējie. 201 00:09:31,430 --> 00:09:33,960 Visi pa labi, tā, ka tas nav man ton informāciju. 202 00:09:33,960 --> 00:09:37,600 Es varētu mēģināt izdrukāt mainīgo, bet es nezinu nevienu mainīgo nosaukumi. 203 00:09:37,600 --> 00:09:39,930 Es varētu mēģināt atpakaļ pēdas, bet es esmu iekšā galvenais, 204 00:09:39,930 --> 00:09:43,710 tāpēc es zinu, man nav veikti cita funkcija zvans tieši tagad. 205 00:09:43,710 --> 00:09:47,710 >> Tātad izskatās mans vienīgais iespējas izmantot n vai tik un sākt ienirt. 206 00:09:47,710 --> 00:09:49,630 Es esmu gatavojas izmantot n. 207 00:09:49,630 --> 00:09:51,180 Tāpēc es rakstīt n. 208 00:09:51,180 --> 00:09:53,060 Ak mans Dievs, kas notiek šeit. 209 00:09:53,060 --> 00:09:56,260 Program saņemti signāli, SIGSEGV segmentāciju vaina, 210 00:09:56,260 --> 00:09:57,880 un tad viss ķekars sīkumi. 211 00:09:57,880 --> 00:09:58,880 Es esmu jau satriekti. 212 00:09:58,880 --> 00:10:00,980 Nu, tur ir tiešām daudz ko iemācījušies šeit. 213 00:10:00,980 --> 00:10:02,520 Tātad, ko tas mums stāsta? 214 00:10:02,520 --> 00:10:09,180 Ko tas stāsta mums ir, šī programma ir par to, bet vēl nav noticis, SEG vaina. 215 00:10:09,180 --> 00:10:12,550 Un jo īpaši, es eju lai tuvinātu vēl šeit, 216 00:10:12,550 --> 00:10:18,980 tas ir par SEG vaina par kaut ko sauc strcmp. 217 00:10:18,980 --> 00:10:22,705 >> Tagad, mēs, iespējams, nav apspriesti Šī funkcija plaši. 218 00:10:22,705 --> 00:10:25,580 Bet tas is-- tāpēc, ka mēs nebrauksim lai runātu par katru funkciju, 219 00:10:25,580 --> 00:10:28,610 eksistē C standartā library-- bet viņi visi ir pieejami, lai jūs, 220 00:10:28,610 --> 00:10:32,110 it īpaši, ja esat lietojis apskatīt reference.cs50.net. 221 00:10:32,110 --> 00:10:35,000 Un strcmp ir ļoti spēcīgs funkcija, kas pastāv iekšpusē 222 00:10:35,000 --> 00:10:38,070 no string.h header fails, kas ir header 223 00:10:38,070 --> 00:10:41,970 fails, kas ir veltīta funkcijām ka darbs ar un manipulēt stīgas. 224 00:10:41,970 --> 00:10:49,830 >> Un jo īpaši, kāda strcmp tas ir tā salīdzina vērtības divām stīgām. 225 00:10:49,830 --> 00:10:54,160 Tāpēc es esmu par to segmentācijas vaina uz aicinājumu strcmp šķiet. 226 00:10:54,160 --> 00:10:58,530 I hit n, un patiesībā man ziņu, Programma izbeigts ar signāla SIGSEGV 227 00:10:58,530 --> 00:11:01,370 segmentēšana vaina. Tāpēc tagad Man tiešām ir SEG pārmest, 228 00:11:01,370 --> 00:11:06,479 un mana programma ir diezgan daudz efektīvāk atdevis. 229 00:11:06,479 --> 00:11:07,770 Tas ir beigu programmas. 230 00:11:07,770 --> 00:11:10,370 Tā sabojājusies, tā avarēja. 231 00:11:10,370 --> 00:11:14,740 Tātad nebija daudz, bet es faktiski bija uzzināt diezgan daudz 232 00:11:14,740 --> 00:11:16,747 no šīs maz pieredzes. 233 00:11:16,747 --> 00:11:17,580 Ko es esmu iemācījies? 234 00:11:17,580 --> 00:11:22,020 Nu, mana programma avarē diezgan daudz nekavējoties. 235 00:11:22,020 --> 00:11:26,300 Mana programma avarē uz zvanu uz strcmp, bet es 236 00:11:26,300 --> 00:11:30,560 nav nekādu vietējo mainīgie manā programma brīdī, ka tas atteici. 237 00:11:30,560 --> 00:11:37,320 Tātad, ko string, vai virknes, Es, iespējams, varētu būt salīdzināt. 238 00:11:37,320 --> 00:11:42,140 Ja man nav nekādu vietēja mainīgie, jūs varētu 239 00:11:42,140 --> 00:11:45,520 domāt, ka es have-- tur varbūt ir globālo mainīgo, kas varētu būt taisnība. 240 00:11:45,520 --> 00:11:47,670 >> Bet vispār, šķiet, piemēram, es esmu salīdzināt 241 00:11:47,670 --> 00:11:52,070 uz kaut ko, kas neeksistē. 242 00:11:52,070 --> 00:11:54,130 Tātad pieņemsim izpētīt ka nedaudz tālāk. 243 00:11:54,130 --> 00:11:55,120 Tāpēc es esmu gatavojas, lai notīrītu manu ekrānu. 244 00:11:55,120 --> 00:11:57,536 Es esmu gatavojas pamest ārā no GDB vide uz otru. 245 00:11:57,536 --> 00:12:01,300 Un es domāju, OK, tāpēc tur ir vietējie mainīgie manā programmā. 246 00:12:01,300 --> 00:12:06,444 Nez, ja varbūt es esmu vajadzēja iziet virknē kā komandrindas argumentu. 247 00:12:06,444 --> 00:12:07,610 Tātad pieņemsim tikai pārbaudīt šo out. 248 00:12:07,610 --> 00:12:09,020 Man nav izdarīts pirms tam. 249 00:12:09,020 --> 00:12:14,244 >> Redzēsim, vai varbūt, ja man palaist šo programmu ar komandrindas argumentu tā darbojas. 250 00:12:14,244 --> 00:12:16,140 Huh, neviens segmentācija vaina tur. 251 00:12:16,140 --> 00:12:17,870 Tas tikai man teica, ka es sapratu to ārā. 252 00:12:17,870 --> 00:12:19,170 Tātad, varbūt tas ir noteikt šeit. 253 00:12:19,170 --> 00:12:27,560 Un tiešām, ja es dodos atpakaļ un apskatīt faktiskais pirmkods buggy1.c, 254 00:12:27,560 --> 00:12:31,180 šķiet, ka tas, ko es daru, ir Es esmu padarot aicinājumu strcmp bez 255 00:12:31,180 --> 00:12:34,010 pārbaudot, vai patiesībā argv [1] eksistē. 256 00:12:34,010 --> 00:12:36,730 Tas ir faktiski pirmkods buggy1.c. 257 00:12:36,730 --> 00:12:38,855 Tātad, ko es tiešām ir nepieciešams, lai darīt šeit, lai noteikt savu programmu, 258 00:12:38,855 --> 00:12:40,835 pieņemot, ka man ir failu man priekšā, ir 259 00:12:40,835 --> 00:12:44,740 lai vienkārši pievienojiet pārbaudi, lai padarītu ka argc ir vienāds ar 2. 260 00:12:44,740 --> 00:12:47,780 Tātad šis piemērs, atkal, kā jau teicu, ir mazliet izdomāts, vai ne? 261 00:12:47,780 --> 00:12:49,840 Tu vispār nav gatavojas nejauši izdzēst savu pirmkodu 262 00:12:49,840 --> 00:12:51,820 un tad ir jāmēģina un atkļūdot programmas. 263 00:12:51,820 --> 00:12:53,120 Bet, cerams, tas deva Jūs ilustrācija 264 00:12:53,120 --> 00:12:55,120 no lietas veidu, kas jūs varētu domāt par 265 00:12:55,120 --> 00:12:56,610 kā jūs atkļūdošana savu programmu. 266 00:12:56,610 --> 00:12:58,760 >> Kāda ir situācija šeit? 267 00:12:58,760 --> 00:13:00,510 Ko mainīgie man ir pieejams pie manis? 268 00:13:00,510 --> 00:13:03,600 Kur tieši ir mana programma crashing, uz kāda līniju, 269 00:13:03,600 --> 00:13:05,240 par to, zvans uz kādu funkciju? 270 00:13:05,240 --> 00:13:06,952 Kādu versijām tas, kas dod man? 271 00:13:06,952 --> 00:13:08,910 Un tas ir tieši tas veida domāšanas veids, kas jums 272 00:13:08,910 --> 00:13:12,820 Būtu nokļūst, kad esat domājot par atkļūdošana programmas. 273 00:13:12,820 --> 00:13:13,820 >> Es esmu Doug Lloyd. 274 00:13:13,820 --> 00:13:16,140 Tas ir CS50. 275 00:13:16,140 --> 00:15:08,642