1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> Doug LLOYD: Pekala GDB. 3 00:00:06,830 --> 00:00:08,480 Tam olarak nedir? 4 00:00:08,480 --> 00:00:11,310 Standları Yani GDB, GNU Debugger, 5 00:00:11,310 --> 00:00:15,040 gerçekten harika bir araçtır biz yapabilirsiniz olduğunu Bizim programları ayıklamak bize yardımcı olmak için kullanabileceğiniz, 6 00:00:15,040 --> 00:00:18,210 veya şeyler nerede olduğunu öğrenmek Bizim programlarda yanlış gidiyor. 7 00:00:18,210 --> 00:00:22,590 GDB, inanılmaz güçlü ama bu çıkış ve etkileşim 8 00:00:22,590 --> 00:00:23,830 biraz şifreli olabilir. 9 00:00:23,830 --> 00:00:28,210 Genellikle bir komut satırı aracı, ve Senin de iletilerin bir sürü atabilir. 10 00:00:28,210 --> 00:00:31,144 Ve bu tür zor olabilir oluyor tam olarak ne ayrıştırmak. 11 00:00:31,144 --> 00:00:33,560 Neyse ki, biz geçtiniz adımlar sizin için bu sorunu çözmek için 12 00:00:33,560 --> 00:00:36,281 Eğer CS50 ile çalışırken. 13 00:00:36,281 --> 00:00:39,030 Eğer grafiksel kullanmıyorsanız debugger, hangi meslektaşım Dan 14 00:00:39,030 --> 00:00:41,570 Armandarse oldukça konuştu Bir video hakkında biraz o 15 00:00:41,570 --> 00:00:44,740 burada olmalı Şu anda, ihtiyacınız olabilecek 16 00:00:44,740 --> 00:00:48,270 Bu komut satırını kullanmak için araçlar GDB ile çalışmak. 17 00:00:48,270 --> 00:00:51,250 Eğer CS50 çalışan ediyorsanız IDE, bunu yapmak gerekmez. 18 00:00:51,250 --> 00:00:53,550 Ama sen değilsen CS50 IDE çalışan, 19 00:00:53,550 --> 00:00:55,750 belki bir sürümünü kullanıyorsanız CS50 Aletler, 20 00:00:55,750 --> 00:00:58,860 ya da başka bir Linux işletim GDB ile sistem üzerinde yüklü 21 00:00:58,860 --> 00:01:00,980 Eğer kullanmanız gerekebilir Bu komut satırı araçları. 22 00:01:00,980 --> 00:01:02,860 >> Ve bu yana olabilir bu, bunu yapmak zorunda 23 00:01:02,860 --> 00:01:06,280 Sadece anlamak için yararlı GDB komut satırından çalışır. 24 00:01:06,280 --> 00:01:09,650 Fakat yine de, sen eğer CS50 IDE kullanırken, 25 00:01:09,650 --> 00:01:15,400 grafik hata ayıklayıcı kullanabilirsiniz Bu IDE içine inşa edilmiştir. 26 00:01:15,400 --> 00:01:18,750 Yani işler ile yola çıkmaya GDB, hata ayıklama başlatmak için 27 00:01:18,750 --> 00:01:21,220 Belirli bir işlem Program, tüm yapmanız gereken 28 00:01:21,220 --> 00:01:23,810 GDB takip tip olduğunu Program adına göre. 29 00:01:23,810 --> 00:01:28,620 Yani, örneğin, program ise merhaba, GDB Merhaba yazarsınız. 30 00:01:28,620 --> 00:01:31,210 >> Bunu yaptığınızda, gidiyoruz GDB ortamı yukarı çekin. 31 00:01:31,210 --> 00:01:33,800 Sizin istemi değiştirmek ve olacak yerine olmanın genellikle neyi onu 32 00:01:33,800 --> 00:01:35,841 Eğer bir şeyler yazarken olduğunu Komut LINE ls at, 33 00:01:35,841 --> 00:01:38,115 tipik Tüm cd-- Linux, senin istemi komutları 34 00:01:38,115 --> 00:01:42,200 Muhtemelen, bir şey değişecek Parantez gibi GDB parantez. 35 00:01:42,200 --> 00:01:46,630 Bunun nedeni, yeni GDB istemi var Eğer GDB ortamı içinde konum. 36 00:01:46,630 --> 00:01:49,830 Bir kez bu ortam içinde, İki büyük komutları var 37 00:01:49,830 --> 00:01:52,290 Muhtemelen kullanmak edeceğiz aşağıdaki sırayla. 38 00:01:52,290 --> 00:01:55,200 >> İlk b olan mola için kısa. 39 00:01:55,200 --> 00:01:58,690 Ve b, genellikle yazdıktan sonra Bir fonksiyonun adını yazın, 40 00:01:58,690 --> 00:02:01,040 ya da bilmek ne varsa Ne satır numarası etrafında 41 00:02:01,040 --> 00:02:04,100 Programınız başlıyor Biraz tuhaf davranmaya, 42 00:02:04,100 --> 00:02:06,370 Bir çizgi yazabilirsiniz sayıda da. 43 00:02:06,370 --> 00:02:09,660 Ne b veya mola yapar bu sizin programı veriyor 44 00:02:09,660 --> 00:02:13,270 Belli bir noktaya kadar çalıştırmak için, fonksiyonun, yani, adı 45 00:02:13,270 --> 00:02:15,880 Belirttiğiniz veya çizgi olduğunu Belirlediğiniz numara. 46 00:02:15,880 --> 00:02:18,590 >> Ve bu noktada, o yürütme donacak. 47 00:02:18,590 --> 00:02:21,670 Bunun nedeni, gerçekten iyi bir şeydir yürütme dondurulmuş edildikten sonra, 48 00:02:21,670 --> 00:02:25,214 Çok yavaş başlayabilirsiniz programınız adım adım. 49 00:02:25,214 --> 00:02:28,130 Eğer oldum Genellikle, çalışan programlarınız, onlar oldukça kısa olduğunu. 50 00:02:28,130 --> 00:02:31,250 Genellikle, nokta çizgi tipi ne olursa olsun Programınızın adı girin vurmak 51 00:02:31,250 --> 00:02:33,470 ve yanıp önce, senin Program zaten bitti. 52 00:02:33,470 --> 00:02:36,620 Gerçekten denemek için zaman çok değil ve yanlış neler olduğunu anlamaya. 53 00:02:36,620 --> 00:02:40,920 Gerçekten bir şeyler yavaş edebilmek için So Aşağı b ile bir kırılma noktasını belirleyerek, 54 00:02:40,920 --> 00:02:43,040 ve ardından adım. 55 00:02:43,040 --> 00:02:46,169 >> Eğer mola koyduk sonra bir kez point, programı çalıştırabilirsiniz. 56 00:02:46,169 --> 00:02:47,960 Ve eğer varsa komut satırı argümanları, 57 00:02:47,960 --> 00:02:51,610 Eğer onları burada belirtmedi zaman Eğer program adı GDB yazın. 58 00:02:51,610 --> 00:02:55,980 Tüm komut satırı belirtmek r veya çalıştırmak alarak argümanlar, 59 00:02:55,980 --> 00:03:00,270 ve sonra ne olursa olsun komut satırı argümanları Eğer programın içine gerekir. 60 00:03:00,270 --> 00:03:03,510 Diğer bir dizi gerçekten vardır önemli ve yararlı komutlar 61 00:03:03,510 --> 00:03:04,970 GSYH ortamının içinde. 62 00:03:04,970 --> 00:03:07,540 Dolayısıyla, sadece hızlı bir şekilde bana izin bazıları üzerine gitmek. 63 00:03:07,540 --> 00:03:11,320 >> İlk sonraki kısaltmasıdır n'dir, ve sonraki yerine n yazabilirsiniz 64 00:03:11,320 --> 00:03:12,304 Her iki çalışmaya devam eder. 65 00:03:12,304 --> 00:03:13,470 Ve bu sadece steno var. 66 00:03:13,470 --> 00:03:17,540 Ve muhtemelen kazanılmış ettik gibi şeyleri yazmanız edememek, kullanılan 67 00:03:17,540 --> 00:03:20,520 kısa genellikle daha iyidir. 68 00:03:20,520 --> 00:03:24,100 Ve ne yapacak o olacak olan kod öne bir blok adım. 69 00:03:24,100 --> 00:03:26,170 Bu yüzden ileriye taşımak olacak bir işlev çağrısı kadar. 70 00:03:26,170 --> 00:03:28,350 Sonra yerine Bu işlevin içine dalış 71 00:03:28,350 --> 00:03:33,130 ve bu fonksiyonların hepsi geçiyor kod, sadece işleve sahip olacaktır. 72 00:03:33,130 --> 00:03:34,400 >> Işlevi çağrılır. 73 00:03:34,400 --> 00:03:35,733 Onun eseridir ne gerekiyorsa yapacağız. 74 00:03:35,733 --> 00:03:38,870 Bir değer dönecektir denilen işlevi. 75 00:03:38,870 --> 00:03:42,490 Sonra üzerine hareket edeceğiz Bu arama fonksiyonu bir sonraki satırı. 76 00:03:42,490 --> 00:03:44,555 Eğer adım istiyorsanız işlev içinde, 77 00:03:44,555 --> 00:03:46,430 yerine sahip özellikle, yürütmek 78 00:03:46,430 --> 00:03:50,004 Sorun olduğunu düşünüyorsanız Bu işlevin içinde yalan olabilir, 79 00:03:50,004 --> 00:03:52,670 Eğer, tabii ki, bir mola ayarlayabilirsiniz içinde bu işlevin etmektedir. 80 00:03:52,670 --> 00:03:57,820 Zaten çalıştırıyorsanız veya yapabilirsiniz kod ileriye doğru bir çizgi adıma s kullanın. 81 00:03:57,820 --> 00:04:01,170 >> Yani bu adım olacaktır ve işlevleri içine dalış, 82 00:04:01,170 --> 00:04:04,750 yerine sadece yürütme var ve fonksiyon olarak devam 83 00:04:04,750 --> 00:04:07,380 Eğer hata ayıklama için olduğunuzu. 84 00:04:07,380 --> 00:04:09,870 Hiç bilmek istiyorsanız Bir değişkenin değerini, 85 00:04:09,870 --> 00:04:12,507 Eğer p, ya da Yazdır yazabilirsiniz, ve daha sonra değişken adı. 86 00:04:12,507 --> 00:04:15,090 Ve bu, sizin için dışarı basacaktır GDB ortamı içinde, 87 00:04:15,090 --> 00:04:19,110 değişkenin adı, bu sen-- bana-- değişkenin değerini bahane 88 00:04:19,110 --> 00:04:20,064 adında ettik. 89 00:04:20,064 --> 00:04:23,230 Her değerlerini bilmek istiyorsanız Nereden yerel değişken erişilebilir 90 00:04:23,230 --> 00:04:25,970 Şu anda olan senin Program, size bilgi yerliler yazabilirsiniz. 91 00:04:25,970 --> 00:04:28,332 Bu çok daha hızlıdır Daha sonra s yazarak ve ne olursa olsun, 92 00:04:28,332 --> 00:04:30,540 tüm dışarı listeleme hayatta olduğunuzu değişkenler. 93 00:04:30,540 --> 00:04:34,370 Sen bilgi yerliler yazın ve yapabilirsiniz sizin için her şeyi dışarı basacaktır. 94 00:04:34,370 --> 00:04:37,770 Sıradaki olan bt olduğunu Geri Trace için kısa. 95 00:04:37,770 --> 00:04:41,680 Şimdi, genel olarak, özellikle erken CS50 olarak, 96 00:04:41,680 --> 00:04:44,450 Eğer gerçekten fırsat olmaz bt veya geri Trace kullanmak için, 97 00:04:44,450 --> 00:04:47,860 Eğer fonksiyonlara sahip değil çünkü diğer işlevleri çağırmak. 98 00:04:47,860 --> 00:04:50,450 >> Ana çağrı a sahip olabilir fonksiyonu, ancak bu muhtemelen öyle. 99 00:04:50,450 --> 00:04:53,199 Bunu diğer işlevi yok Başka bir işlevi çağırarak hangi 100 00:04:53,199 --> 00:04:54,880 Başka bir işlevini çağırır, vb. 101 00:04:54,880 --> 00:04:57,550 Ama programları daha olsun Karmaşık ve özellikle 102 00:04:57,550 --> 00:05:00,290 Çalışırken başladığınızda yineleme ile, arka iz 103 00:05:00,290 --> 00:05:05,150 izin için gerçekten yararlı bir yol olabilir tür için bazı içerik almak 104 00:05:05,150 --> 00:05:06,460 Benim programda duyuyorum. 105 00:05:06,460 --> 00:05:10,590 Yani kod yazdık demek, ve ana bir işlevini çağırır biliyorum 106 00:05:10,590 --> 00:05:14,720 Bir işlevi çağıran f, Bir işlev h çağırır g. 107 00:05:14,720 --> 00:05:17,650 Bu yüzden birkaç katman var iç içe oluyor burada. 108 00:05:17,650 --> 00:05:19,440 >> Eğer içinde iseniz senin GDB çevre, 109 00:05:19,440 --> 00:05:21,640 ve size içini biliyorum h, ama sen unutmak 110 00:05:21,640 --> 00:05:27,210 Size nerede size ne var hakkında Eğer bt veya arka iz yazabilirsiniz mudur, 111 00:05:27,210 --> 00:05:32,370 ve o, h, g dışarı ana f basacaktır Bazı diğer bilgileri, yanında hangi 112 00:05:32,370 --> 00:05:35,984 Size bir ipucu verir, OK ana adı f, olarak adlandırılır g f, g, h olarak adlandırılan 113 00:05:35,984 --> 00:05:37,900 ve bu nerede ben Şu anda benim programda duyuyorum. 114 00:05:37,900 --> 00:05:41,380 Bu yüzden, gerçekten yararlı olabilir Özellikle GDB şifreli-ness olarak 115 00:05:41,380 --> 00:05:45,667 için, biraz ezici olur şeyler tam olarak nerede olduğunu öğrenmek. 116 00:05:45,667 --> 00:05:48,500 Son olarak, programınız bitince, İşiniz bittiğinde veya hata ayıklama 117 00:05:48,500 --> 00:05:50,125 ve uzaklaşmak istiyorum GDB ortamından, 118 00:05:50,125 --> 00:05:51,940 bunun dışında nasıl bilmek yardımcı olur. 119 00:05:51,940 --> 00:05:55,500 Sen q yazın veya çıkmak için Quit olabilir. 120 00:05:55,500 --> 00:05:59,220 Şimdi, bugünün videosu önce Ben bir adamcağız programı hazırladı 121 00:05:59,220 --> 00:06:03,900 Ben derlenmiş denilen buggy1, buggy1.c olarak bilinen bir dosyadan. 122 00:06:03,900 --> 00:06:06,500 Eğer, bu Tahmin edebileceğiniz gibi Program aslında arabası olduğunu. 123 00:06:06,500 --> 00:06:08,990 Bir şeyler yanlış giderse ben denemek ve çalıştırın. 124 00:06:08,990 --> 00:06:13,014 Şimdi, ne yazık ki, ben yanlışlıkla Benim buggy1.c dosyası silinir 125 00:06:13,014 --> 00:06:15,930 böylece sırayla beni anlamaya için Ne bu program ile yanlış gidiyor 126 00:06:15,930 --> 00:06:18,770 Ben kullanmak zorunda gidiyorum GDB tür körü körüne, çalışıyor 127 00:06:18,770 --> 00:06:22,372 Bu program sayesinde gezinmek için yanlış gidiyor tam olarak ne olduğunu anlamaya. 128 00:06:22,372 --> 00:06:24,580 Ama araçlarını kullanarak biz zaten, hakkında öğrendim 129 00:06:24,580 --> 00:06:27,700 biz hemen hemen bir rakam olabilir tam olarak ne dışarı. 130 00:06:27,700 --> 00:06:30,740 Yani sından izin CS50 IDE ve bir göz var. 131 00:06:30,740 --> 00:06:33,155 Tamam, bu yüzden biz buradayız benim CS50 IDE ortamı, 132 00:06:33,155 --> 00:06:35,697 ve ben biraz yakınlaştırmak olacak bu yüzden biraz daha görebilirsiniz. 133 00:06:35,697 --> 00:06:38,530 Benim terminal penceresinde, ben liste varsa Benim şimdiki yönetmen içeriği 134 00:06:38,530 --> 00:06:41,250 ls, biz o ben görürsünüz kaynak dosyalarının bir çift var 135 00:06:41,250 --> 00:06:44,982 Burada, aşağıdakileri içeren Daha önce buggy1 tartışıldı. 136 00:06:44,982 --> 00:06:46,940 Ne tam olarak ne zaman gider Ben denemek ve buggy1 çalıştırın. 137 00:06:46,940 --> 00:06:47,773 Peki dışarıda bulalım. 138 00:06:47,773 --> 00:06:52,510 Ben, nokta çizgi tipi buggy ve ben Enter tuşuna basın. 139 00:06:52,510 --> 00:06:53,670 >> Segmentasyon hataları. 140 00:06:53,670 --> 00:06:55,000 Bu iyi değil. 141 00:06:55,000 --> 00:06:57,180 Eğer hatırlayacak olursak, bir Segment arıza tipik 142 00:06:57,180 --> 00:07:01,540 Biz belleğe erişim oluşur Biz dokunmak için izin değiliz. 143 00:07:01,540 --> 00:07:03,820 Biz bir şekilde ulaştık sınırları dışında 144 00:07:03,820 --> 00:07:05,995 ne programı, derleyici, bize verdi. 145 00:07:05,995 --> 00:07:08,310 Ve böylece zaten var bir ipucu araç kutusundaki tutmak için 146 00:07:08,310 --> 00:07:10,660 Biz ayıklama işlemine başlarken. 147 00:07:10,660 --> 00:07:13,620 Burada bir şey biraz yanlış gitti. 148 00:07:13,620 --> 00:07:15,935 >> Pekâlâ, izin başlangıç GDB ortamında kadar 149 00:07:15,935 --> 00:07:19,030 biz anlamaya eğer görmek tam olarak ne bir sorundur. 150 00:07:19,030 --> 00:07:21,674 Ben, benim ekranı temizlemek için gidiyorum ve ben GDB yazın gidiyorum 151 00:07:21,674 --> 00:07:24,340 Yine, GDB ortamına girmek için, ve programın adı 152 00:07:24,340 --> 00:07:27,450 Ben, buggy1 hata ayıklamak istediğiniz. 153 00:07:27,450 --> 00:07:30,182 Biz okuma, biraz olsun mesajı buggy1 sembollerini yapılır. 154 00:07:30,182 --> 00:07:32,390 Demek ki tüm bu olup çekti Birlikte tüm kod, 155 00:07:32,390 --> 00:07:35,570 ve şimdi yüklenen oldu GDB ve gitmek için hazır. 156 00:07:35,570 --> 00:07:37,140 >> Şimdi ne yapmak istiyorsun? 157 00:07:37,140 --> 00:07:39,130 Ne hatırlıyor musun İlk adım, tipik olarak 158 00:07:39,130 --> 00:07:42,540 Ben bu ortamın içinde olduğumu sonra? 159 00:07:42,540 --> 00:07:44,540 Umarım, set sözü Bir kırılma noktası, çünkü 160 00:07:44,540 --> 00:07:46,240 Aslında ben yapmak istediğim budur. 161 00:07:46,240 --> 00:07:47,990 Şimdi, ben yok Bunun için kaynak kodu 162 00:07:47,990 --> 00:07:50,948 Önümde, hangi muhtemelen değil tipik kullanım durumunda, bu arada. 163 00:07:50,948 --> 00:07:52,055 Muhtemelen olacaktır. 164 00:07:52,055 --> 00:07:52,680 Yani bu iyi. 165 00:07:52,680 --> 00:07:55,790 Ama varsayarak değil, ne yapmak Bildiğiniz bir fonksiyon 166 00:07:55,790 --> 00:07:58,880 her C programı var? 167 00:07:58,880 --> 00:08:04,420 Ne kadar büyük ya da ne kadar karmaşık o, bu işlev kesinlikle var. 168 00:08:04,420 --> 00:08:05,440 Main, değil mi? 169 00:08:05,440 --> 00:08:08,870 >> Yani her şeyden biz yapabilirsiniz başarısız Ana bir kesme noktası ayarlamak. 170 00:08:08,870 --> 00:08:12,200 Ve yine, ben sadece yazabilirsiniz yerine b ana bölünürler. 171 00:08:12,200 --> 00:08:14,650 Ve sen, meraklı iseniz eğer Hiç uzun bir komutu yazın 172 00:08:14,650 --> 00:08:16,800 ve o zaman fark yanlış bir şey yazdınız, 173 00:08:16,800 --> 00:08:18,770 ve kurtulmak istiyorum Tüm ben yaptım, 174 00:08:18,770 --> 00:08:22,029 hangi irade, Denetim U alabilir her şeyi silmek ve seni geri getirmek 175 00:08:22,029 --> 00:08:23,570 İmleç hatlarının başına. 176 00:08:23,570 --> 00:08:26,569 Sadece basılı daha hızlı bir sürü silme veya bunu bir demet kez isabet 177 00:08:26,569 --> 00:08:27,080 bitti. 178 00:08:27,080 --> 00:08:28,740 >> Yani biz ana bir kesme noktası ayarlamak gerekir. 179 00:08:28,740 --> 00:08:32,970 Ve gördüğünüz gibi, biz ettik diyor Dosya buggy1.c bir kesme noktası ayarlamak, 180 00:08:32,970 --> 00:08:36,330 ve görünüşe göre ilk satırı Ana kod satırı yedidir. 181 00:08:36,330 --> 00:08:38,080 Yine, biz yok Burada kaynak dosya, 182 00:08:38,080 --> 00:08:40,429 ama olduğunu varsayıyoruz Bana doğruyu söylüyor. 183 00:08:40,429 --> 00:08:44,510 Ve sonra, ben sadece çalışıyorum ve r, programı çalıştırın. 184 00:08:44,510 --> 00:08:45,360 Programının başlatılması. 185 00:08:45,360 --> 00:08:48,160 Pekala, bu mesajı Biraz şifreli olduğunu. 186 00:08:48,160 --> 00:08:50,160 Ama temelde ne Buradaki bu sadece bir 187 00:08:50,160 --> 00:08:53,350 Ben mola isabet ettik bana nokta, kırılma noktası 1 numara. 188 00:08:53,350 --> 00:08:55,877 >> Ve sonra, o kod satırı, Böyle bir dosya ya da dizin yok. 189 00:08:55,877 --> 00:08:57,710 Tek nedeni o Ben bu mesajı görüyorum 190 00:08:57,710 --> 00:09:00,800 I yanlışlıkla çünkü Benim buggy.c dosya silindi. 191 00:09:00,800 --> 00:09:04,050 Benim buggy1.c dosya var ise Geçerli dizinde, 192 00:09:04,050 --> 00:09:06,920 Orada aslında olur o hat hakkı Bana söylediklerini kod satırı 193 00:09:06,920 --> 00:09:08,214 Kelimenin tam anlamıyla okur. 194 00:09:08,214 --> 00:09:09,380 Ne yazık ki, bunu silindi. 195 00:09:09,380 --> 00:09:14,790 Biz tür gezinmek zorunda gidiyoruz daha körü körüne bu biraz aracılığıyla. 196 00:09:14,790 --> 00:09:17,330 >> Tamam, bu yüzden görelim ne Burada yapmak istiyorsun? 197 00:09:17,330 --> 00:09:21,770 Eh, ben yerel ne bilmek istiyorum değişkenler belki benim için kullanılabilir. 198 00:09:21,770 --> 00:09:23,570 Ben programı başladım. 199 00:09:23,570 --> 00:09:28,515 En olabileceğini görelim zaten bizim için başlatıldı. 200 00:09:28,515 --> 00:09:31,430 Ben Bilgi halkı, hiçbir yerli yazın. 201 00:09:31,430 --> 00:09:33,960 Pekala, o değil bu yüzden Bana bilgi ton verir. 202 00:09:33,960 --> 00:09:37,600 Ben denemek ve bir değişken yazdırmak olabilir, ama herhangi bir değişken isimlerini bilmiyorum. 203 00:09:37,600 --> 00:09:39,930 Ben bir arka iz deneyebilirsiniz, ama ana içinde değilim, 204 00:09:39,930 --> 00:09:43,710 bu yüzden ben yapılmış değil biliyorum Şu anda başka bir işlev çağrısı. 205 00:09:43,710 --> 00:09:47,710 >> Benim tek seçenek olduğu gibi Yani görünüyor n ya da öylesine kullanın ve dalış başlamak için. 206 00:09:47,710 --> 00:09:49,630 Ben n kullanmak için gidiyorum. 207 00:09:49,630 --> 00:09:51,180 Yani n yazın. 208 00:09:51,180 --> 00:09:53,060 Aman Tanrım, neler oluyor burada. 209 00:09:53,060 --> 00:09:56,260 Program alınan sinyalleri, SIGSEGV segmentasyon hatası, 210 00:09:56,260 --> 00:09:57,880 ve ardından şeyler bir sürü. 211 00:09:57,880 --> 00:09:58,880 Ben zaten bunaldım. 212 00:09:58,880 --> 00:10:00,980 Eh, aslında orada bir burada çok öğrenilecek. 213 00:10:00,980 --> 00:10:02,520 Peki bu bize ne anlatıyor? 214 00:10:02,520 --> 00:10:09,180 Ne söyler bu program, bir hakkında, ancak sahip değil henüz, seg arıza. 215 00:10:09,180 --> 00:10:12,550 Ve özellikle de, ben gidiyorum Hatta burada daha fazla yakınlaştırmak için, 216 00:10:12,550 --> 00:10:18,980 bu konuda hatayı seg için ilgili bir şey strcmp denir. 217 00:10:18,980 --> 00:10:22,705 >> Şimdi, biz ele olmayabilir yoğun bu işlevi kullanın. 218 00:10:22,705 --> 00:10:25,580 Biz gitmiyoruz çünkü Ama bu-- her fonksiyonu hakkında konuşmak için bu 219 00:10:25,580 --> 00:10:28,610 C standardında var library-- ama onlar, sana tüm mevcut konum 220 00:10:28,610 --> 00:10:32,110 Eğer almak özellikle reference.cs50.net bak. 221 00:10:32,110 --> 00:10:35,000 Ve strcmp gerçekten güçlü içeride var işlevi 222 00:10:35,000 --> 00:10:38,070 string.h başlığının bir başlık olan dosya, 223 00:10:38,070 --> 00:10:41,970 işlevlerine adanmış dosya o iş ve dizeleri işlemek. 224 00:10:41,970 --> 00:10:49,830 >> Ve özellikle de ne strcmp yapmasıdır iki dizeleri değerlerini karşılaştırır. 225 00:10:49,830 --> 00:10:54,160 Yani hatayı segmentasyon üzereyim Bir çağrı görünüyor strcmp için. 226 00:10:54,160 --> 00:10:58,530 Ben n vurdu, ve aslında ben mesajı alıyorum program sinyali SIGSEGV ile sona 227 00:10:58,530 --> 00:11:01,370 Segmentasyon hatası. Yani şimdi Aslında seg hatalı olması, 228 00:11:01,370 --> 00:11:06,479 ve benim program oldukça vardır çok etkili bir vazgeçmiş. 229 00:11:06,479 --> 00:11:07,770 Bu programın sonudur. 230 00:11:07,770 --> 00:11:10,370 O bozuldu, çöktü. 231 00:11:10,370 --> 00:11:14,740 Yani çok değildi, ama ben aslında biraz öğrendin 232 00:11:14,740 --> 00:11:16,747 Bu küçük deneyimlerinden. 233 00:11:16,747 --> 00:11:17,580 Ne öğrendiniz? 234 00:11:17,580 --> 00:11:22,020 Eh, benim program çöküyor Hemen oldukça fazla. 235 00:11:22,020 --> 00:11:26,300 Benim program çöker Bir strcmp için diyoruz, ama ben 236 00:11:26,300 --> 00:11:30,560 herhangi bir yerel değişkenleri yok benim o çöker anda programı. 237 00:11:30,560 --> 00:11:37,320 Peki dize veya dizeler, Ben belki karşılaştırarak olabilir. 238 00:11:37,320 --> 00:11:42,140 Ben herhangi bir yerel yoksa değişkenler, sen belki 239 00:11:42,140 --> 00:11:45,520 belki bir ben orada have-- yürütebiliriz doğru olabilir global değişken. 240 00:11:45,520 --> 00:11:47,670 >> Ama genelde, öyle görünüyor gibi karşılaştırarak kulüpler 241 00:11:47,670 --> 00:11:52,070 yok bir şey. 242 00:11:52,070 --> 00:11:54,130 Yani inceleyelim Biraz daha söyledi. 243 00:11:54,130 --> 00:11:55,120 Yani benim ekranı temizlemek için gidiyorum. 244 00:11:55,120 --> 00:11:57,536 Ben dışarı çıkın gidiyorum Bir saniye GDB ortamı. 245 00:11:57,536 --> 00:12:01,300 Ve ben, tamam düşünme değilim, bu yüzden var Benim programda yerel bir değişken. 246 00:12:01,300 --> 00:12:06,444 Ben geçmesi gerekiyor belki acaba Bir komut satırı argümanı olarak bir dize. 247 00:12:06,444 --> 00:12:07,610 Yani sadece bu test edelim. 248 00:12:07,610 --> 00:12:09,020 Ben daha önce bu yapmadım. 249 00:12:09,020 --> 00:12:14,244 >> Ben bu programı çalıştırmak belki Bakalım Bir komut satırı argümanı ile çalışır. 250 00:12:14,244 --> 00:12:16,140 Ha, hiçbir bölümleme hatası. 251 00:12:16,140 --> 00:12:17,870 Sadece ben bunu anladım söyledi. 252 00:12:17,870 --> 00:12:19,170 Yani belki de düzeltme burada. 253 00:12:19,170 --> 00:12:27,560 Geri dönüp eğer ve gerçekten bakmak buggy1.c gerçek kaynak kodu, 254 00:12:27,560 --> 00:12:31,180 Ben ne yapıyorum sanki görünüyor Ben olmadan strcmp için bir çağrı yapıyorum 255 00:12:31,180 --> 00:12:34,010 Aslında argv [1] var olup olmadığını kontrol ediyor. 256 00:12:34,010 --> 00:12:36,730 Bu aslında buggy1.c kaynak kodu. 257 00:12:36,730 --> 00:12:38,855 Yani ben gerçekten gereken Benim programı düzeltmek için burada yapmak, 258 00:12:38,855 --> 00:12:40,835 varsayarak ben olduğunu önümde dosya 259 00:12:40,835 --> 00:12:44,740 Sadece yapmak için bir onay eklemek için emin argc 2'ye eşittir. 260 00:12:44,740 --> 00:12:47,780 Yani bu örnek, yine ben, dediğim gibi Doğru, biraz yapmacık mı? 261 00:12:47,780 --> 00:12:49,840 Genellikle gitmiyorsun yanlışlıkla kaynak kodunu silmek 262 00:12:49,840 --> 00:12:51,820 ve daha sonra denemek zorunda ve programı hata ayıklama. 263 00:12:51,820 --> 00:12:53,120 Ama umarım bu verdi Bir çizim 264 00:12:53,120 --> 00:12:55,120 şeylerin türlü o Eğer düşünmeye olabilir 265 00:12:55,120 --> 00:12:56,610 olarak programınızı hata ayıklama ediyoruz. 266 00:12:56,610 --> 00:12:58,760 >> Burada vaziyet nedir? 267 00:12:58,760 --> 00:13:00,510 Ne değişkenler I do Bana erişilebilir var? 268 00:13:00,510 --> 00:13:03,600 Nerede tam olarak benim program Ne on line, kilitleniyor, 269 00:13:03,600 --> 00:13:05,240 Ne işlevine ne çağrı üzerine? 270 00:13:05,240 --> 00:13:06,952 Ipuçları Ne tür bana verir? 271 00:13:06,952 --> 00:13:08,910 Ve bu tam olarak zihniyet tür size 272 00:13:08,910 --> 00:13:12,820 sen ne zaman geçmesini gerektiğini Programlarınızı hata ayıklama hakkında düşünme. 273 00:13:12,820 --> 00:13:13,820 >> Ben Doug Lloyd değilim. 274 00:13:13,820 --> 00:13:16,140 Bu CS50 olduğunu. 275 00:13:16,140 --> 00:15:08,642