1 00:00:07,170 --> 00:00:12,630 [Powered by Google Translate] Gdb, GNU Layihəsinin Debugger, C üçün güclü bir hata vasitədir 2 00:00:12,630 --> 00:00:14,300 çox digər dillərdə birlikdə. 3 00:00:14,300 --> 00:00:17,440 Onlar icra etdiyiniz zaman, sizin C proqramlar içərisində ətrafında soxmaq üçün imkan verir 4 00:00:17,440 --> 00:00:20,880 və bu da sizə olur nə görmək üçün imkan verir 5 00:00:20,880 --> 00:00:22,490 zaman proqram qəzaları. 6 00:00:22,490 --> 00:00:24,690 Bu, sağ olduqca uykusuz var? 7 00:00:24,690 --> 00:00:27,980 Gdb pulsuz proqram, və bir çox məşhur UNİX çalışır və 8 00:00:27,980 --> 00:00:31,840 Windows-based əməliyyat sistemləri, belə ki, bir çox geniş aracıdır. 9 00:00:31,840 --> 00:00:33,560 >> Siz bu sevgi öyrənmək lazımdır. 10 00:00:33,560 --> 00:00:36,800 Gdb lehte hataları aşağı izleme daha asan vaxt 11 00:00:36,800 --> 00:00:39,150 guesses istifadə etməklə qarışdırmaq istəyənlər çox 12 00:00:39,150 --> 00:00:41,420 və printout hesabatlarının sonsuz məbləğlər. 13 00:00:41,420 --> 00:00:45,810 Gdb bir terminal ilə qarşılıqlı bilər o deməkdir ki, bir komanda-line alətdir 14 00:00:45,810 --> 00:00:49,720 siçan ilə klaviatura vasitəsilə əmrləri yerinə tıklayarak düymələri verilməsi. 15 00:00:49,720 --> 00:00:54,960 >> Gdb başlamaq üçün, sözün tez və hit yalnız type gdb daxil edin. 16 00:00:54,960 --> 00:00:58,230 Siz ekran çap bəzi sətirlər görürsünüz 17 00:00:58,230 --> 00:01:00,810 , siz yayınlıyorsanız ki, gdb buraxılış göstərən 18 00:01:00,810 --> 00:01:07,890 onun copyright informasiya və sonunda siz gdb tez görəcəksiniz: (gdb). 19 00:01:07,890 --> 00:01:10,770 Bu gdb əmrləri üçün hazır olduğunu bilmelerine imkan verir. 20 00:01:10,770 --> 00:01:15,400 Bu nöqtədə, necə bilmək üçün ən əhəmiyyətli şey çıxmaq edilir. 21 00:01:15,400 --> 00:01:17,790 Xoşbəxtlikdən, bu olduqca sadədir. 22 00:01:17,790 --> 00:01:19,840 Bu çıxmaq əmr yalnız edir. 23 00:01:19,840 --> 00:01:23,090 Qısa olaraq, yalnız q çox istifadə edə bilərsiniz. 24 00:01:23,090 --> 00:01:27,410 Əyləncə gdb qədər önyükleme və sonra dərhal çıxmaq kimi kimi, 25 00:01:27,410 --> 00:01:30,800 bir proqram debug kömək gdb istifadə haqqında danışmaq indi edək. 26 00:01:30,800 --> 00:01:34,630 >> Başlamaq üçün, burada factorial.c bir proqram var 27 00:01:34,630 --> 00:01:37,380 bir int alır və onun faktöryel hesablamaq çalışır. 28 00:01:37,380 --> 00:01:41,270 Əgər əvvəl factorials görməmişik və ya onlara xatırlamıram 29 00:01:41,270 --> 00:01:47,840 Bu sayı faktöryel n n məhsulu bərabər - (n - 1), (n - 2), və s - 30 00:01:47,840 --> 00:01:49,230 siz 1 hit qədər. 31 00:01:49,230 --> 00:01:54,550 Buna görə də, 3-faktöryel 3 * 2 * 1 və ya 6, 32 00:01:54,550 --> 00:02:00,180 və 4-faktöryel 4 * 3 * 2 * 1 və ya 24. 33 00:02:00,180 --> 00:02:03,970 Sıfır faktöryel bir tək halda, o, 1 deyil 34 00:02:03,970 --> 00:02:06,970 və mənfi integers və factorials müəyyən edilməmişdir. 35 00:02:06,970 --> 00:02:10,280 Hər halda, mənim faktöryel proqramı haqqında bir şey funky edir. 36 00:02:10,280 --> 00:02:15,410 Mən bunu çalıştırdığınızda, factorials ilə əlaqəsi var ki, qəribə ədəd çap edir. 37 00:02:15,410 --> 00:02:19,030 >> Belə ki, biz nə anlamaq kömək gdb istifadə edə bilərsiniz. 38 00:02:19,030 --> 00:02:21,720 Gdb, çalıştırılabilir fayllar fəaliyyət 39 00:02:21,720 --> 00:02:24,910 olan tərtibi prosesi istehsal ikili faylları. 40 00:02:24,910 --> 00:02:30,940 Yəni, biz. C gdb çalıştırmak və ya bilməz. Factorial.c kimi h kodunu faylları. 41 00:02:30,940 --> 00:02:34,650 Biz yerine faktöryel bu almaq istəyirsinizsə. 42 00:02:34,650 --> 00:02:38,340 Proqram hər hansı bir komanda-line dəlilləri tələb varsa, 43 00:02:38,340 --> 00:02:40,230 biz onlara daxil istediğiniz bu. 44 00:02:40,230 --> 00:02:44,050 Bu halda, faktöryel, hər hansı bir komanda-line dəlilləri tələb etmir 45 00:02:44,050 --> 00:02:46,410 biz yalnız qısa run və ya r yazın. 46 00:02:46,410 --> 00:02:50,440 >> Bu faktöryel proqramı davam başlayacaq. 47 00:02:50,440 --> 00:02:53,940 Proqram çalışan vermir zaman, mən gdb geri təklif almaq lazımdır. 48 00:02:53,940 --> 00:02:58,130 OK, 4 və faktöryel, yenə eyni şey edək. 49 00:02:58,130 --> 00:03:02,910 Bütün hüquqlar, biz gdb burada junk eyni cür əldə etdiyiniz görürük. 50 00:03:02,910 --> 00:03:04,850 Proqramı başa çatdı İndi ki, 51 00:03:04,850 --> 00:03:06,870 Biz getmək və dövlət hər hansı daxil ola bilər 52 00:03:06,870 --> 00:03:09,870 biz nə edə bilərsiniz əvvəl yenidən çalışan başlamaq lazımdır. 53 00:03:09,870 --> 00:03:13,570 Lakin biz onun run ortasında var isə bunu dayandırmaq üçün bir yol lazımdır. 54 00:03:13,570 --> 00:03:16,970 >> Bunu etmək üçün, biz breakpoint deyirlər nə istifadə edin. 55 00:03:16,970 --> 00:03:21,880 Breakpoints xüsusi funksiyası və ya mənbə kodu xəttində fasilə proqramı gdb demək 56 00:03:21,880 --> 00:03:24,070 belə ki, proqram dövlət yoxlamaq olar 57 00:03:24,070 --> 00:03:27,380 dəyişənlərin dəyərlərinin, yaddaş dövlət və belə, o nöqtədə. 58 00:03:27,380 --> 00:03:30,750 Mən, həqiqətən, hər şeyi yanlış gedir yerləşir bilmirəm ildən, 59 00:03:30,750 --> 00:03:33,510 >> Mən yalnız sağ çox başında ayıklama başlamaq istəyirəm 60 00:03:33,510 --> 00:03:36,510 əsas başlayır doğru zaman. 61 00:03:36,510 --> 00:03:39,260 Biz fasilə funksiyanı istifadə edərək əsas əvvəlində breakpoint qurmaq lazımdır. 62 00:03:39,260 --> 00:03:42,640 Biz də fasilə qısaltmaq b istifadə edə bilərsiniz. 63 00:03:42,640 --> 00:03:45,000 İndi proqram yeniden yayınlanmaya başlamaq edək. 64 00:03:45,000 --> 00:03:48,140 Burada gdb bizə deyir kimi, əsas əvvəlinə var. 65 00:03:48,140 --> 00:03:51,970 Icra haqqında, ancaq hələ ki kodu line 66 00:03:51,970 --> 00:03:53,480 bu printf xəttidir. 67 00:03:53,480 --> 00:03:57,200 Biz kodu bu xətti həyata və növbəti line getmək gdb deyə bilərsiniz 68 00:03:57,200 --> 00:03:59,840 Növbəti və ya n komanda ilə. 69 00:03:59,840 --> 00:04:04,120 >> Bütün hüquqlar, indi gdb biz GetInt line olduğunu bizə deyir. 70 00:04:04,120 --> 00:04:06,630 Mən printf xətti etmədi kimi görünür bilirik ki, 71 00:04:06,630 --> 00:04:10,070 biz görmürük bəri, ekranda çap həyata "müsbət tam daxil edin" 72 00:04:10,070 --> 00:04:12,040 ancaq faktiki run idi. 73 00:04:12,040 --> 00:04:16,029 Biz gördükdə əməliyyat sistemi ekran üçün yazılı bir şey yatırmaq edir 74 00:04:16,029 --> 00:04:19,649 tamamilə niyə çapı ilə ayıklama ki, var qədər 75 00:04:19,649 --> 00:04:21,730 bəzən etibarsız görünə bilər. 76 00:04:21,730 --> 00:04:26,240 Hər halda, kodu, növbəti line getmək və bir int daxil yenə edək. 77 00:04:26,240 --> 00:04:30,070 Yenə növü 4 edək. 78 00:04:30,070 --> 00:04:34,540 Belə ki, bu qəribə görünür. Biz, gdb əsasən line 12 etdiyiniz 79 00:04:34,540 --> 00:04:37,660 lakin icra haqqında ki, növbəti line bir buruq brace edir. 80 00:04:37,660 --> 00:04:42,110 >> Yalnız bir loop sonunda istəyirik deməkdir ki, bizim nə isə əslində loop, 81 00:04:42,110 --> 00:04:46,710 və gdb bizə izah olunur ki, xitam vəziyyəti, sıfırdan yəni heç biri az, 82 00:04:46,710 --> 00:04:48,010 Növbəti icra edəcək. 83 00:04:48,010 --> 00:04:50,230 Heç bir az confusing alır varsa, 84 00:04:50,230 --> 00:04:54,860 biz siyahısına və ya l komanda ilə gdb olan mənbə kodu qoparmaq bilər. 85 00:04:54,860 --> 00:04:56,880 Bu mənbə kodu çap 86 00:04:56,880 --> 00:04:59,010 ki, biz hazırda olduğunuz xətti ətrafında mərkəzi var. 87 00:04:59,010 --> 00:05:03,590 Yenə siyahısı və ya l yazın, biz xətləri növbəti set çap görəcəksiniz. 88 00:05:03,590 --> 00:05:06,070 Biz fayl sonunda hit qədər bunu edə bilərsiniz. 89 00:05:06,070 --> 00:05:11,210 >> Biz idi geri almaq üçün, bir xətt nömrəsi ilə siyahı təmin edə bilər 90 00:05:11,210 --> 00:05:14,120 Bu halda, line 12. 91 00:05:14,120 --> 00:05:16,040 Hər halda, üzrə hərəkət edək. 92 00:05:16,040 --> 00:05:18,240 İndi biz 4 loop etdiyiniz. 93 00:05:18,240 --> 00:05:21,490 Gəlin bizim num dəyişən 4 şey əmin olun. 94 00:05:21,490 --> 00:05:26,170 Biz çap, və ya p, komanda ilə bunu. 95 00:05:26,170 --> 00:05:31,140 Belə ki, gdb biz gözlənildiyi kimi num həqiqətən, 4 saxlanılması ki, bizə deyir. 96 00:05:31,140 --> 00:05:35,180 Ki, gdb yazdıran $ 1 out xüsusi gdb dəyişir 97 00:05:35,180 --> 00:05:37,720 indi də sayı 4 saxlamaq üçün müəyyən edilir. 98 00:05:37,720 --> 00:05:42,240 İndi bu iqnor edə bilər, lakin bu gdb dəyişənlərin lazımlı super gəlib 99 00:05:42,240 --> 00:05:46,380 daha inkişaf etmiş hallarda siz keçmişdə etdiyiniz nə geri istədiyiniz zaman. 100 00:05:46,380 --> 00:05:50,970 Hər halda, sonrakı hərəkət, biz loop üçün vasitəsilə hərəkət başlamaq görürük. 101 00:05:50,970 --> 00:05:54,790 Bit by bit n burada vasitəsilə davam edək. 102 00:05:54,790 --> 00:05:58,280 Əksinə yazaraq n hər dəfə çox, siz də daxil hit bilər yalnız. 103 00:05:58,280 --> 00:06:03,710 Bir şey yazaraq olmadan daxil hit zaman, gdb yalnız əvvəlki komanda təkrar edir. 104 00:06:03,710 --> 00:06:05,910 Belə ki, indi biz printf zəng edib etdik. 105 00:06:05,910 --> 00:06:09,520 Biz həqiqətən loop 4 dəfə bizim keçmişdir etdiyiniz kimi, bu, görünür 106 00:06:09,520 --> 00:06:13,750 olan biz 1, 2, 3 və 4-çoxaltmaq üçün etmək istəyirəm nə. 107 00:06:13,750 --> 00:06:15,870 >> Hər şey çalışan kimi görünür, 108 00:06:15,870 --> 00:06:19,680 biz növbəti yenidən hit zaman istisna olmaqla, yerine 24 Bu çox almaq. 109 00:06:19,680 --> 00:06:23,100 Biz faktöryel istifadə p dəyəri çap varsa, 110 00:06:23,100 --> 00:06:26,120 biz faktöryel bu bu kütləvi sayı var olduğunu görürük. 111 00:06:26,120 --> 00:06:28,740 Something mütləq səhv edəcək. 112 00:06:28,740 --> 00:06:31,960 Bu nöqtədə, baxmayaraq ki, biz demək olar ki, proqramın sonunda var 113 00:06:31,960 --> 00:06:34,610 və bir şey düzeltmek üçün çox geç. 114 00:06:34,610 --> 00:06:39,750 >> Bununla belə, biz təsdiq yenidən və sonra y r yazaraq proqramı yenidən başlada bilərsiniz. 115 00:06:39,750 --> 00:06:43,460 İndi biz əsas əvvəlində bizim breakpoint geri istəyirik. 116 00:06:43,460 --> 00:06:46,600 Biz hər şeyi n oxu ilə gözəl görünür ki, bilirik. 117 00:06:46,600 --> 00:06:48,630 biz n qabaqda atlayabilir. 118 00:06:48,630 --> 00:06:52,280 Də bunu sonra Alternativ olaraq, biz yeni breakpoint bilərsiniz isə loop 119 00:06:52,280 --> 00:06:54,910 və orada jump. Nin bunu edək. 120 00:06:54,910 --> 00:06:59,080 Line 14 yalnız loop sonra gəlir kimi görünür. 121 00:06:59,080 --> 00:07:01,070 Nin bir breakpoint müəyyən edək. 122 00:07:01,070 --> 00:07:05,220 Bu breakpoint komanda fayl adını belirtmek üçün yaxşı təcrübə var 123 00:07:05,220 --> 00:07:08,480 Bir neçə faylları ilə iş edirsinizsə gdb qarışıq bilərsiniz ildən. 124 00:07:08,480 --> 00:07:13,230 Irəlidə bu breakpoint hərəkət üçün, davam ya c funksiyanı istifadə edəcəyik. 125 00:07:13,230 --> 00:07:16,570 >> OK, burada biz loop üçün var. 126 00:07:16,570 --> 00:07:19,060 Nin loop üçün daxil 1 daha line gedək, 127 00:07:19,060 --> 00:07:21,630 və sonra neler görmek üçün çap dəyişənlərin başlamaq lazımdır. 128 00:07:21,630 --> 00:07:26,410 Gəlin gözlənildiyi kimi i, həqiqətən 1 əmin olun. 129 00:07:26,410 --> 00:07:28,300 Bütün yaxşı ki Yup. 130 00:07:28,300 --> 00:07:30,270 Haqqında faktöryel nə olsa? 131 00:07:30,270 --> 00:07:33,760 Heç bir yaxşı ki Whoa. 132 00:07:33,760 --> 00:07:35,800 Biz burada bir böyük mənfi nömrəsi var. 133 00:07:35,800 --> 00:07:38,190 Ki, baş How'd? 134 00:07:38,190 --> 00:07:40,040 Yaxşı, biz kodu geri baxmaq əgər, 135 00:07:40,040 --> 00:07:44,800 biz bu başlatılmış heç ki, biz yalnız orada zibil var. 136 00:07:44,800 --> 00:07:46,820 Bu mütləq bizim hesablanması atmaq edəcək. 137 00:07:46,820 --> 00:07:49,930 >> Xoşbəxtlikdən, biz bu düzeltmek üçün gdb tərk etmək yoxdur. 138 00:07:49,930 --> 00:07:54,590 Biz burada başlamaq və sonra çap funksiyanı istifadə edərək, kodu bunu düzeltebilirsiniz. 139 00:07:54,590 --> 00:07:59,500 Sıfır və 1 factorials 1 həm çünki Biz, 1 onu başlamaq lazımdır 140 00:07:59,500 --> 00:08:03,940 biz sıfır onu başlamaq əgər, biz həmişə nəticəsində sıfır ilə başa ediyorum. 141 00:08:03,940 --> 00:08:08,370 Siz super lazımlı olan hər hansı bir dəyişən bu şəkildə təyin edə bilərsiniz. 142 00:08:08,370 --> 00:08:10,920 İndi, bizim proqram davam edək. 143 00:08:10,920 --> 00:08:14,040 Gəlin bu ehtimal yerdə hər şey var əmin olun. 144 00:08:14,040 --> 00:08:19,090 Say 4 olmalıdır i 1 olmalıdır və faktöryel çox 1 olmalıdır. 145 00:08:19,090 --> 00:08:23,990 Biz bu prosesi qısa və bizim yerli dəyişənlərin bütün çap edə bilərsiniz 146 00:08:23,990 --> 00:08:26,440 super faydalı komanda info yerli ilə, 147 00:08:26,440 --> 00:08:29,190 olan in-daxilində yerli dəyişənlərin bütün görüntüler. 148 00:08:29,190 --> 00:08:31,980 Hər şey getmək üçün yaxşı kimi Hər halda, bu, görünür. 149 00:08:31,980 --> 00:08:34,700 >> Yalnız əmin bir go-ətrafında loop nə edək. 150 00:08:34,700 --> 00:08:38,789 OK, hər şey böyük görünür. 151 00:08:38,789 --> 00:08:41,659 İndi sonuna getmək üçün davam komanda istifadə edə bilərsiniz. 152 00:08:41,659 --> 00:08:46,170 Sweet! 4 faktöryel gözlənildiyi kimi 24 çap. 153 00:08:46,170 --> 00:08:48,690 İndi bizim kodu bu fix bilərsiniz. 154 00:08:48,690 --> 00:08:53,710 Əksinə gdb həyata çıxmaq çox, biz bunu başqa terminal sekmesini istifadə edəcəyik. 155 00:08:53,710 --> 00:08:58,080 Bizim gdb nişanı geri Going, indi bizim çalıştırılabilir derleyeceğiz lazımdır. 156 00:08:58,080 --> 00:09:03,180 Gdb haqqında ən yaxşı şey biri siz run gdb tərk etmək lazım deyil ki. 157 00:09:03,180 --> 00:09:06,570 Belə ki, biz, köhnə breakpoints vuruş saxlamaq olmayan 158 00:09:06,570 --> 00:09:10,440 Gəlin onları aradan, bu guessed, komanda aradan buraxın. 159 00:09:10,440 --> 00:09:13,320 Bu, bizim breakpoints bütün aradan bırakır. 160 00:09:13,320 --> 00:09:18,180 İndi biz r ilə proqramı yenidən başladın və hər şey tamam əmin edə bilərsiniz. 161 00:09:18,180 --> 00:09:21,300 Hər şey getmək üçün yaxşı kimi görünür. 162 00:09:21,300 --> 00:09:24,410 24 həyata 4 baskı faktöryel, yalnız kimi biz düşündük. 163 00:09:24,410 --> 00:09:28,830 Gdb sizin Toolbox əldə etdiyiniz ən faydalı tools biridir. 164 00:09:28,830 --> 00:09:31,970 >> Siz gdb ilə edə bilərsiniz bir ton daha çox şeyi var 165 00:09:31,970 --> 00:09:34,030 siz sadə çapı ilə edə bilərsiniz daha çox. 166 00:09:34,030 --> 00:09:36,730 Növbəti dəfə proqram, istədiyiniz nə deyil 167 00:09:36,730 --> 00:09:39,740 içərisində neler həyata rəqəm gdb çalışan çalışırıq. 168 00:09:39,740 --> 00:09:44,380 Təcrübə bir az, siz heç bir zaman sağ bug aşağı qazılması bilərsiniz. 169 00:09:44,380 --> 00:09:48,180 My name Nate Hardison edir. Bu CS50 edir.