1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> डौग लॉयड: सभी अधिकार GDB। 3 00:00:06,830 --> 00:00:08,480 हकीकत में यह क्या है? 4 00:00:08,480 --> 00:00:11,310 जो खड़ा है तो GDB, जीएनयू डिबगर के लिए, 5 00:00:11,310 --> 00:00:15,040 वास्तव में एक भयानक उपकरण है कि हम कर सकते है हमारे कार्यक्रमों डिबग हमें मदद करने के लिए उपयोग करते हैं, 6 00:00:15,040 --> 00:00:18,210 या चीजों रहे हैं, जहां यह पता लगाना हमारे कार्यक्रमों में गलत हो रहा है। 7 00:00:18,210 --> 00:00:22,590 GDB, आश्चर्यजनक शक्तिशाली है लेकिन इसके साथ उत्पादन और बातचीत 8 00:00:22,590 --> 00:00:23,830 एक छोटा सा गुप्त हो सकता है। 9 00:00:23,830 --> 00:00:28,210 यह आमतौर पर एक कमांड लाइन उपकरण है, और यह आप पर संदेशों की एक बहुत फेंक सकते हैं। 10 00:00:28,210 --> 00:00:31,144 और यह किस तरह की मेहनत करने के लिए कर सकते हैं हो रहा है कि क्या वास्तव में पार्स। 11 00:00:31,144 --> 00:00:33,560 सौभाग्य से, हम ले लिया है कदम आप इस समस्या को दूर करने के लिए 12 00:00:33,560 --> 00:00:36,281 आप CS50 के माध्यम से काम करते हैं। 13 00:00:36,281 --> 00:00:39,030 आप चित्रमय का उपयोग नहीं कर रहे हैं, डिबगर, जो मेरे सहयोगी दान 14 00:00:39,030 --> 00:00:41,570 Armandarse काफी बात की है एक वीडियो में के बारे में एक सा है कि 15 00:00:41,570 --> 00:00:44,740 यहाँ पर होना चाहिए अब ठीक है, आप की जरूरत हो सकती है 16 00:00:44,740 --> 00:00:48,270 इन कमांड लाइन का उपयोग करने के लिए उपकरण GDB के साथ काम करने के लिए। 17 00:00:48,270 --> 00:00:51,250 आप CS50 में काम कर रहे हैं आईडीई, आप ऐसा करने की जरूरत नहीं है। 18 00:00:51,250 --> 00:00:53,550 लेकिन अगर तुम नहीं हो CS50 आईडीई में काम कर रहे, 19 00:00:53,550 --> 00:00:55,750 शायद एक संस्करण का उपयोग CS50 उपकरण की, 20 00:00:55,750 --> 00:00:58,860 या एक और लिनक्स ऑपरेटिंग GDB के साथ प्रणाली, उस पर स्थापित 21 00:00:58,860 --> 00:01:00,980 आप का उपयोग करने के लिए आवश्यकता हो सकती है इन कमांड लाइन उपकरण। 22 00:01:00,980 --> 00:01:02,860 >> और जब से तुम हो सकता है यह है, कि क्या करना है 23 00:01:02,860 --> 00:01:06,280 बस कैसे समझने के लिए उपयोगी GDB कमांड लाइन से काम करता है। 24 00:01:06,280 --> 00:01:09,650 लेकिन फिर, आप कर रहे हैं CS50 आईडीई का उपयोग कर, आप 25 00:01:09,650 --> 00:01:15,400 चित्रमय डिबगर का उपयोग कर सकते हैं कि आईडीई में बनाया गया है। 26 00:01:15,400 --> 00:01:18,750 तो चीजों के साथ जा पाने के लिए GDB, डिबगिंग शुरू करने के लिए 27 00:01:18,750 --> 00:01:21,220 एक विशेष की प्रक्रिया कार्यक्रम, तुम सब करने की ज़रूरत है 28 00:01:21,220 --> 00:01:23,810 GDB पीछा टाइप कार्यक्रम के नाम से। 29 00:01:23,810 --> 00:01:28,620 तो उदाहरण के लिए, अपने कार्यक्रम है, तो हैलो, आप GDB हैलो टाइप करेंगे। 30 00:01:28,620 --> 00:01:31,210 >> यदि आप ऐसा करते हैं, आप जा रहे हैं GDB पर्यावरण को खींचने के लिए। 31 00:01:31,210 --> 00:01:33,800 आपके शीघ्र बदलने के लिए, और होगा बदले जा रहा है की आम तौर पर क्या यह 32 00:01:33,800 --> 00:01:35,841 आप चीजों को लिखते समय है आदेश line-- रास में, 33 00:01:35,841 --> 00:01:38,115 अपने ठेठ के सभी cd-- लिनक्स, आपके शीघ्र आदेशों 34 00:01:38,115 --> 00:01:42,200 , शायद, कुछ करने के लिए बदल जाएगा कोष्ठकों तरह GDB कोष्ठक। 35 00:01:42,200 --> 00:01:46,630 ऐसा इसलिए है क्योंकि अपने नए GDB शीघ्र है आप GDB पर्यावरण के अंदर हो। 36 00:01:46,630 --> 00:01:49,830 एक बार है कि पर्यावरण के अंदर, दो प्रमुख कमानों रहे है 37 00:01:49,830 --> 00:01:52,290 आप शायद का उपयोग करेंगे इस क्रम में। 38 00:01:52,290 --> 00:01:55,200 >> पहले बी, जो है ब्रेक के लिए छोटा है। 39 00:01:55,200 --> 00:01:58,690 और अगर आप ख, आप आमतौर पर टाइप करने के बाद एक समारोह का नाम टाइप करें, 40 00:01:58,690 --> 00:02:01,040 या आप को पता होगा कि अगर क्या लाइन नंबर के आसपास 41 00:02:01,040 --> 00:02:04,100 अपने कार्यक्रम शुरू कर रहा है एक अजीब सा व्यवहार करने के लिए, 42 00:02:04,100 --> 00:02:06,370 आप एक पंक्ति टाइप कर सकते हैं नंबर वहाँ के रूप में अच्छी तरह से। 43 00:02:06,370 --> 00:02:09,660 क्या बी, या तोड़ने करता है, है यह अपने कार्यक्रम की अनुमति देता है 44 00:02:09,660 --> 00:02:13,270 एक निश्चित बिंदु तक चलाने के लिए, समारोह के नाम से, नाम 45 00:02:13,270 --> 00:02:15,880 आपके द्वारा निर्दिष्ट या लाइन कि आपके द्वारा निर्दिष्ट संख्या। 46 00:02:15,880 --> 00:02:18,590 >> और उस बिंदु पर, यह निष्पादन फ्रीज होगा। 47 00:02:18,590 --> 00:02:21,670 इस वजह से, एक बहुत अच्छी बात है निष्पादन जमे हुए किया गया है एक बार, 48 00:02:21,670 --> 00:02:25,214 आप बहुत धीरे धीरे शुरू कर सकते हैं अपने कार्यक्रम के माध्यम से कदम। 49 00:02:25,214 --> 00:02:28,130 आप किया गया है जो आम तौर पर चल रहा है, अपने कार्यक्रमों, वे बहुत कम कर रहे हैं। 50 00:02:28,130 --> 00:02:31,250 आमतौर पर, आप डॉट स्लेश टाइप जो कुछ भी अपने कार्यक्रम के नाम, हिट दर्ज है 51 00:02:31,250 --> 00:02:33,470 और आप पलक कर सकते हैं, इससे पहले कि आपके कार्यक्रम के पहले ही समाप्त हो गया है। 52 00:02:33,470 --> 00:02:36,620 यह वास्तव में कोशिश करने के लिए समय की एक बहुत कुछ नहीं है और गलत क्या हो रहा है यह पता लगाने। 53 00:02:36,620 --> 00:02:40,920 यह वास्तव में चीजें धीमी गति से करने में सक्षम हो तो नीचे बी के साथ एक ब्रेक अंक की स्थापना करके, 54 00:02:40,920 --> 00:02:43,040 और उसके बाद में निकलते। 55 00:02:43,040 --> 00:02:46,169 >> आप अपने को तोड़ने की स्थापना की है तो एक बार बिंदु, आप प्रोग्राम चला सकते हैं। 56 00:02:46,169 --> 00:02:47,960 और अगर आप किसी भी कमांड लाइन तर्क, 57 00:02:47,960 --> 00:02:51,610 आप उन्हें यहाँ निर्दिष्ट नहीं जब आप अपने कार्यक्रम के नाम GDB लिखें। 58 00:02:51,610 --> 00:02:55,980 आप सभी कमांड लाइन निर्दिष्ट आर, या रन लेने के द्वारा तर्क, 59 00:02:55,980 --> 00:03:00,270 और फिर जो भी कमांड लाइन तर्क आप अपने प्रोग्राम के अंदर की जरूरत है। 60 00:03:00,270 --> 00:03:03,510 अन्य की एक संख्या वास्तव में कर रहे हैं महत्वपूर्ण और उपयोगी आदेशों 61 00:03:03,510 --> 00:03:04,970 सकल घरेलू उत्पाद पर्यावरण के अंदर। 62 00:03:04,970 --> 00:03:07,540 तो बस जल्दी से मुझे दो उनमें से कुछ पर चलते हैं। 63 00:03:07,540 --> 00:03:11,320 >> पहला, अगले के लिए कम है जो एन, है और आप अगले बजाय n के टाइप कर सकते हैं 64 00:03:11,320 --> 00:03:12,304 दोनों काम करेगा। 65 00:03:12,304 --> 00:03:13,470 और यह सिर्फ आशुलिपि है। 66 00:03:13,470 --> 00:03:17,540 और आप शायद पहले से ही मिल गया है के रूप में चीजों को टाइप करने में सक्षम किया जा रहा है, के लिए इस्तेमाल किया 67 00:03:17,540 --> 00:03:20,520 कम आम तौर पर बेहतर है। 68 00:03:20,520 --> 00:03:24,100 और क्या यह करना होगा कि यह जाएगा कोड के आगे एक ब्लॉक कदम। 69 00:03:24,100 --> 00:03:26,170 तो यह आगे बढ़ना होगा एक समारोह कॉल जब तक। 70 00:03:26,170 --> 00:03:28,350 और फिर बजाय का उस समारोह में गोताखोरी 71 00:03:28,350 --> 00:03:33,130 और कहा कि कार्यों के सभी के माध्यम से जा रहा कोड, यह सिर्फ समारोह होगा। 72 00:03:33,130 --> 00:03:34,400 >> समारोह में बुलाया जाएगा। 73 00:03:34,400 --> 00:03:35,733 यह अपने काम है जो कुछ भी करना होगा। 74 00:03:35,733 --> 00:03:38,870 यह एक मूल्य के लिए वापस आ जाएगी यह कहा जाता है कि समारोह। 75 00:03:38,870 --> 00:03:42,490 और फिर आप के लिए कदम होगा कि बुला समारोह की अगली पंक्ति। 76 00:03:42,490 --> 00:03:44,555 आप कदम चाहते हैं समारोह के अंदर, 77 00:03:44,555 --> 00:03:46,430 बजाय सिर्फ होने का यह विशेष रूप से, अमल 78 00:03:46,430 --> 00:03:50,004 आप समस्या यह है कि अगर आपको लगता उस समारोह के अंदर झूठ हो सकता है, 79 00:03:50,004 --> 00:03:52,670 आप निश्चित रूप से, एक ब्रेक तैयार कर सकती है अंदर उस समारोह का इशारा करते हैं। 80 00:03:52,670 --> 00:03:57,820 आप पहले से ही चल रहे हैं या, यदि आप कर सकते हैं कोड के आगे एक लाइन करने के लिए कदम रों का उपयोग करें। 81 00:03:57,820 --> 00:04:01,170 >> तो इस में कदम होगा और कार्यों में गोता, 82 00:04:01,170 --> 00:04:04,750 के बजाय सिर्फ निष्पादित और समारोह में जारी रखने पर 83 00:04:04,750 --> 00:04:07,380 आप डिबगिंग के लिए कर रहे हैं। 84 00:04:07,380 --> 00:04:09,870 यदि आप कभी भी जानना चाहते हैं एक चर के मूल्य, 85 00:04:09,870 --> 00:04:12,507 आप पी, या प्रिंट टाइप कर सकते हैं, और फिर चर नाम। 86 00:04:12,507 --> 00:04:15,090 और कहा कि, आप के लिए बाहर प्रिंट होगा GDB पर्यावरण के अंदर, 87 00:04:15,090 --> 00:04:19,110 चर का नाम, कि you-- me-- चर के मूल्य बहाना 88 00:04:19,110 --> 00:04:20,064 आप नामित किया है। 89 00:04:20,064 --> 00:04:23,230 आप हर के मूल्यों को जानना चाहते हैं जहां से स्थानीय चर सुलभ 90 00:04:23,230 --> 00:04:25,970 आप वर्तमान में कर रहे हैं अपने कार्यक्रम आप की जानकारी स्थानीय लोगों को टाइप कर सकते हैं। 91 00:04:25,970 --> 00:04:28,332 की तुलना में यह एक बहुत तेज है तो पी टाइपिंग और जो कुछ भी, 92 00:04:28,332 --> 00:04:30,540 बाहर के सभी लिस्टिंग आप पता होता है कि चर। 93 00:04:30,540 --> 00:04:34,370 आप की जानकारी स्थानीय लोगों को टाइप करें, और यह कर सकते हैं आप के लिए सब कुछ बाहर प्रिंट होगा। 94 00:04:34,370 --> 00:04:37,770 अगले ऊपर है, जो बीटी है वापस ट्रेस के लिए कम। 95 00:04:37,770 --> 00:04:41,680 अब, आम तौर पर, विशेष रूप से जल्दी CS50 में, 96 00:04:41,680 --> 00:04:44,450 आप वास्तव में अवसर नहीं होगा बीटी, या वापस ट्रेस का उपयोग करने के लिए, 97 00:04:44,450 --> 00:04:47,860 आप कार्यों नहीं कर रहे हैं, क्योंकि कि अन्य कार्यों कहते हैं। 98 00:04:47,860 --> 00:04:50,450 >> आप मुख्य कॉल एक हो सकता है समारोह, लेकिन लगता है कि शायद यह बात है। 99 00:04:50,450 --> 00:04:53,199 आपको लगता है कि अन्य समारोह में नहीं है एक अन्य समारोह, बुला जो 100 00:04:53,199 --> 00:04:54,880 एक अन्य समारोह में कहता है, और इतने पर। 101 00:04:54,880 --> 00:04:57,550 लेकिन अपने कार्यक्रमों को और अधिक पाने के रूप में जटिल है, और विशेष रूप से 102 00:04:57,550 --> 00:05:00,290 आप काम शुरू करते समय प्रत्यावर्तन के साथ वापस ट्रेस 103 00:05:00,290 --> 00:05:05,150 आप यह बताने के लिए एक बहुत उपयोगी तरीका हो सकता है तरह का है, जहां के लिए कुछ प्रसंग मिलता है 104 00:05:05,150 --> 00:05:06,460 मैं अपने कार्यक्रम में हूँ। 105 00:05:06,460 --> 00:05:10,590 तो अगर आप अपने कोड लिखा है कहते हैं, और आप मुख्य एक समारोह कॉल जानते हैं कि 106 00:05:10,590 --> 00:05:14,720 एक समारोह में जो कॉल च, एक समारोह एच कहता है जो जी,। 107 00:05:14,720 --> 00:05:17,650 इसलिए हम कई परतें हैं घोंसले के शिकार के यहां चल रहा है। 108 00:05:17,650 --> 00:05:19,440 >> आप के अंदर कर रहे हैं अपने GDB पर्यावरण, 109 00:05:19,440 --> 00:05:21,640 और आप अपने अंदर पता घंटा की, लेकिन आप भूल जाते हैं 110 00:05:21,640 --> 00:05:27,210 आप जहां तक ​​तुम्हारे पास क्या है के बारे में आप बीटी, या वापस ट्रेस टाइप कर सकते हैं are--, 111 00:05:27,210 --> 00:05:32,370 और यह, एच, जी बाहर मुख्य च प्रिंट होगा कुछ अन्य जानकारी के साथ-साथ जो 112 00:05:32,370 --> 00:05:35,984 आप एक संकेत देता है कि, ठीक मुख्य कहा जाता च कहा जाता है, जी एफ, जी, एच बुलाया 113 00:05:35,984 --> 00:05:37,900 और कहा कि जहां मैं वर्तमान में मेरे कार्यक्रम में हूँ। 114 00:05:37,900 --> 00:05:41,380 तो यह वास्तव में उपयोगी हो सकता है विशेष रूप से GDB का गुप्त सत्ता के रूप में 115 00:05:41,380 --> 00:05:45,667 करने के लिए, एक छोटे से भारी हो जाता है बातें कर रहे हैं वास्तव में, जहां यह पता लगाना। 116 00:05:45,667 --> 00:05:48,500 अंत में, अपने कार्यक्रम किया जाता है, जब आप कर रहे हैं या इसे डिबगिंग 117 00:05:48,500 --> 00:05:50,125 और तुम दूर कदम चाहते हैं GDB वातावरण से, 118 00:05:50,125 --> 00:05:51,940 यह इसे से बाहर निकलने के लिए कैसे पता करने के लिए मदद करता है। 119 00:05:51,940 --> 00:05:55,500 आप क्यू टाइप करें, या बाहर निकलने के लिए, छोड़ सकते हैं। 120 00:05:55,500 --> 00:05:59,220 अब, आज के वीडियो से पहले मैं एक छोटी गाड़ी कार्यक्रम तैयार 121 00:05:59,220 --> 00:06:03,900 मैं संकलित जो कहा जाता buggy1, buggy1.c के रूप में जाना जाता है एक फ़ाइल से। 122 00:06:03,900 --> 00:06:06,500 यदि आप इस उम्मीद कर सकते हैं कार्यक्रम तथ्य छोटी गाड़ी में है। 123 00:06:06,500 --> 00:06:08,990 कुछ गलत हो जाता है जब मैं कोशिश करते हैं और इसे चलाते हैं। 124 00:06:08,990 --> 00:06:13,014 अब, दुर्भाग्य से, मैं अनजाने , मेरे buggy1.c फ़ाइल को नष्ट 125 00:06:13,014 --> 00:06:15,930 इसलिए क्रम में मुझे बाहर निकालने के लिए क्या, इस कार्यक्रम के साथ गलत हो रहा है 126 00:06:15,930 --> 00:06:18,770 मैं का उपयोग करने के लिए जा रहा हूँ GDB तरह की आँख बंद करके की कोशिश कर रहा 127 00:06:18,770 --> 00:06:22,372 करने के लिए इस कार्यक्रम के माध्यम से नेविगेट करने के लिए गलत हो रहा है कि क्या वास्तव में यह पता लगाने की। 128 00:06:22,372 --> 00:06:24,580 लेकिन सिर्फ उपकरणों का उपयोग हम पहले से ही के बारे में सीखा है 129 00:06:24,580 --> 00:06:27,700 हम बहुत ज्यादा समझ सकते हैं यह है कि क्या वास्तव में बाहर। 130 00:06:27,700 --> 00:06:30,740 तो चलो के लिए सिर पर चलो CS50 आईडीई और एक नजर है। 131 00:06:30,740 --> 00:06:33,155 ठीक है, तो हम में यहाँ कर रहे हैं मेरी CS50 आईडीई पर्यावरण, 132 00:06:33,155 --> 00:06:35,697 और मैं एक छोटा सा में ज़ूम करता हूँ इसलिए यदि आप एक छोटे से अधिक देख सकते हैं। 133 00:06:35,697 --> 00:06:38,530 मेरी टर्मिनल विंडो में, मैं इस सूची में यदि मेरे वर्तमान निदेशक की सामग्री 134 00:06:38,530 --> 00:06:41,250 रास के साथ, हम है कि जब मैं देखता हूँ स्रोत फ़ाइलों की एक जोड़ी है 135 00:06:41,250 --> 00:06:44,982 यहाँ, सहित पहले से buggy1 पर चर्चा की। 136 00:06:44,982 --> 00:06:46,940 क्या वास्तव में जब पर चला जाता है मैं कोशिश करते हैं और buggy1 चलाते हैं। 137 00:06:46,940 --> 00:06:47,773 खैर चलो पता करते हैं। 138 00:06:47,773 --> 00:06:52,510 मैं डॉट स्लेश टाइप छोटी गाड़ी है, और मैं हिट दर्ज करें। 139 00:06:52,510 --> 00:06:53,670 >> विभाजन के दोष। 140 00:06:53,670 --> 00:06:55,000 यह अच्छा नहीं है। 141 00:06:55,000 --> 00:06:57,180 यदि आपको याद है, एक विभाजन गलती आम तौर पर 142 00:06:57,180 --> 00:07:01,540 हम स्मृति का उपयोग तब होता है जब हम छूने की अनुमति नहीं कर रहे हैं। 143 00:07:01,540 --> 00:07:03,820 हम किसी भी तरह पहुँच गए हैं सीमा से बाहर 144 00:07:03,820 --> 00:07:05,995 का क्या कार्यक्रम है, संकलक, हमें दिया है। 145 00:07:05,995 --> 00:07:08,310 और तो पहले से ही है कि एक सुराग उपकरण बॉक्स में रखने के लिए 146 00:07:08,310 --> 00:07:10,660 हम डिबगिंग प्रक्रिया शुरू करते हैं। 147 00:07:10,660 --> 00:07:13,620 कुछ यहाँ एक छोटे से गलत हो गया है। 148 00:07:13,620 --> 00:07:15,935 >> ठीक है, तो चलो शुरुआत GDB पर्यावरण अप 149 00:07:15,935 --> 00:07:19,030 हम समझ सकते हैं और देखते हैं वास्तव में क्या समस्या है। 150 00:07:19,030 --> 00:07:21,674 मैं अपने स्क्रीन स्पष्ट करने के लिए जा रहा हूँ और मैं GDB टाइप करने के लिए जा रहा हूँ 151 00:07:21,674 --> 00:07:24,340 फिर, GDB वातावरण में प्रवेश करने के लिए, और इस कार्यक्रम का नाम 152 00:07:24,340 --> 00:07:27,450 मैं buggy1 डीबग करना चाहते हैं। 153 00:07:27,450 --> 00:07:30,182 हम पढ़ने, एक छोटे से संदेश मिलता है buggy1 से प्रतीकों, किया। 154 00:07:30,182 --> 00:07:32,390 इसका मतलब है कि सभी इसे खींच लिया है एक साथ कोड के सभी, 155 00:07:32,390 --> 00:07:35,570 और अब इसे में लोड किया गया है GDB, और उसे जाने के लिए तैयार है। 156 00:07:35,570 --> 00:07:37,140 >> अब, मैं क्या करना चाहते हैं? 157 00:07:37,140 --> 00:07:39,130 आप क्या याद है पहले कदम के लिए आम तौर पर है 158 00:07:39,130 --> 00:07:42,540 मैं इस माहौल के अंदर हूँ के बाद? 159 00:07:42,540 --> 00:07:44,540 उम्मीद है, आप लगा दी एक ब्रेक अंक, क्योंकि 160 00:07:44,540 --> 00:07:46,240 वास्तव में है कि मैं क्या करना चाहते है। 161 00:07:46,240 --> 00:07:47,990 अब, मैं नहीं है इस के लिए स्रोत कोड 162 00:07:47,990 --> 00:07:50,948 मेरे सामने, जो शायद है नहीं विशिष्ट उपयोग के मामले में, जिस तरह से। 163 00:07:50,948 --> 00:07:52,055 आप शायद होगा। 164 00:07:52,055 --> 00:07:52,680 तो यह अच्छी बात है। 165 00:07:52,680 --> 00:07:55,790 लेकिन यह सोचते हैं कि आप नहीं, क्या करना क्या आप जानते हैं कि एक समारोह 166 00:07:55,790 --> 00:07:58,880 हर एक सी कार्यक्रम में मौजूद है? 167 00:07:58,880 --> 00:08:04,420 कोई बात नहीं कितना बड़ा या कितनी जटिल यह है, इस समारोह में निश्चित रूप से मौजूद है। 168 00:08:04,420 --> 00:08:05,440 मुख्य, है ना? 169 00:08:05,440 --> 00:08:08,870 >> तो और, हम कर सकते हैं नाकाम रहने मुख्य पर एक ब्रेक अंक निर्धारित किया है। 170 00:08:08,870 --> 00:08:12,200 और फिर, मैं सिर्फ टाइप कर सकते हैं बजाय ख की, मुख्य टूट गया। 171 00:08:12,200 --> 00:08:14,650 और अगर आप उत्सुक हैं, तो आप यदि कभी एक लंबे आदेश बाहर प्रकार 172 00:08:14,650 --> 00:08:16,800 और फिर आप महसूस करते हैं कि गलत बात टाइप, 173 00:08:16,800 --> 00:08:18,770 और आप छुटकारा पाने के लिए चाहते हैं के सभी मैं बस के रूप में किया, 174 00:08:18,770 --> 00:08:22,029 आप जो होगा, नियंत्रण यू ले जा सकते हैं सब कुछ हटा सकते हैं और आप को वापस लाने के 175 00:08:22,029 --> 00:08:23,570 कर्सर लाइनों की शुरुआत करने के लिए। 176 00:08:23,570 --> 00:08:26,569 बस नीचे पकड़ से एक बहुत तेजी हटाने के लिए, या यह एक गुच्छा बार मार 177 00:08:26,569 --> 00:08:27,080 खत्म हो गया। 178 00:08:27,080 --> 00:08:28,740 >> इसलिए हम मुख्य में एक ब्रेक अंक निर्धारित करेंगे। 179 00:08:28,740 --> 00:08:32,970 और आप देख सकते हैं, यह हम है कहते हैं फ़ाइल buggy1.c में एक ब्रेक अंक निर्धारित करते हैं, 180 00:08:32,970 --> 00:08:36,330 और जाहिरा तौर पर पहली पंक्ति मुख्य संहिता की लाइन सात है। 181 00:08:36,330 --> 00:08:38,080 फिर, हमारे पास नहीं है यहाँ स्रोत फ़ाइल, 182 00:08:38,080 --> 00:08:40,429 लेकिन मुझे लगता है कि यह मान लेंगे मुझे सच कह रही। 183 00:08:40,429 --> 00:08:44,510 और फिर, मैं सिर्फ कोशिश कर रहा हूँ और आर, कार्यक्रम चलाते हैं। 184 00:08:44,510 --> 00:08:45,360 कार्यक्रम शुरू। 185 00:08:45,360 --> 00:08:48,160 ठीक है, तो इस संदेश एक छोटी सी गहरी है। 186 00:08:48,160 --> 00:08:50,160 लेकिन मूल रूप से क्या है यहाँ क्या हो रहा है कि यह सिर्फ है 187 00:08:50,160 --> 00:08:53,350 मैं अपने को तोड़ने मारा है मुझे बता रहा है बिंदु, ब्रेक प्वाइंट नंबर 1। 188 00:08:53,350 --> 00:08:55,877 >> और फिर, कोड की है कि लाइन, ऐसी कोई फ़ाइल या डायरेक्टरी नहीं है। 189 00:08:55,877 --> 00:08:57,710 एक ही कारण है कि मैं उस संदेश को देख रहा हूँ 190 00:08:57,710 --> 00:09:00,800 मैं अनजाने क्योंकि मेरी buggy.c फ़ाइल नष्ट कर दिया। 191 00:09:00,800 --> 00:09:04,050 मेरी buggy1.c फ़ाइल अस्तित्व में हैं वर्तमान निर्देशिका में, 192 00:09:04,050 --> 00:09:06,920 वहाँ वास्तव में होता यह है कि लाइन सही मुझे बताओ कि क्या कोड की लाइन 193 00:09:06,920 --> 00:09:08,214 सचमुच पढ़ता है। 194 00:09:08,214 --> 00:09:09,380 दुर्भाग्य से, मैं इसे नष्ट कर दिया। 195 00:09:09,380 --> 00:09:14,790 हम किस तरह का नेविगेट करने के लिए जा रहे हैं अधिक आँख बंद करके इस एक छोटे से के माध्यम से। 196 00:09:14,790 --> 00:09:17,330 >> ठीक है, तो चलो देखते हैं, क्या मैं यहाँ क्या करना चाहते हैं? 197 00:09:17,330 --> 00:09:21,770 खैर, मैं स्थानीय जानते हैं कि क्या करना चाहते हैं चर शायद मेरे लिए उपलब्ध हैं। 198 00:09:21,770 --> 00:09:23,570 मैं अपने कार्यक्रम शुरू कर दिया है। 199 00:09:23,570 --> 00:09:28,515 का हो सकता है देखते हैं क्या पहले से ही हमारे लिए initialized। 200 00:09:28,515 --> 00:09:31,430 मैं जानकारी स्थानीय लोगों को, कोई स्थानीय लोगों लिखें। 201 00:09:31,430 --> 00:09:33,960 ठीक है, कि नहीं करता है तो मुझे जानकारी का एक टन देना। 202 00:09:33,960 --> 00:09:37,600 मैं कोशिश करते हैं और एक चर बाहर प्रिंट कर सकता है, लेकिन मैं किसी भी चर नाम पता नहीं है। 203 00:09:37,600 --> 00:09:39,930 मैं एक वापस ट्रेस करने की कोशिश कर सकता है, लेकिन मैं मुख्य के अंदर हूँ, 204 00:09:39,930 --> 00:09:43,710 इसलिए मुझे लगता है मैं नहीं किया है पता है ठीक है अब एक और समारोह कॉल। 205 00:09:43,710 --> 00:09:47,710 >> मेरी ही विकल्प हैं जैसे तो लग रहा है n या इतनी का उपयोग करें और में गोता लगाने के लिए शुरू करने के लिए। 206 00:09:47,710 --> 00:09:49,630 मैं n का उपयोग करने के लिए जा रहा हूँ। 207 00:09:49,630 --> 00:09:51,180 तो मैं n टाइप करें। 208 00:09:51,180 --> 00:09:53,060 हे भगवान, क्या यहाँ पर जा रहा है। 209 00:09:53,060 --> 00:09:56,260 कार्यक्रम का संकेत प्राप्त किया, SIGSEGV विभाजन गलती है, 210 00:09:56,260 --> 00:09:57,880 और फिर सामान की एक पूरी गुच्छा। 211 00:09:57,880 --> 00:09:58,880 मैं पहले से ही अभिभूत हूँ। 212 00:09:58,880 --> 00:10:00,980 खैर, वहाँ वास्तव में एक बहुत यहाँ सीखा होगा। 213 00:10:00,980 --> 00:10:02,520 तो यह हमें क्या बताता है? 214 00:10:02,520 --> 00:10:09,180 क्या यह हमें बताता है इस कार्यक्रम है, है के बारे में है, लेकिन अभी तक नहीं है, SEG गलती है। 215 00:10:09,180 --> 00:10:12,550 और विशेष रूप से, मैं जा रहा हूँ आगे भी यहां ज़ूम करने के लिए, 216 00:10:12,550 --> 00:10:18,980 इसके बारे में गलती SEG तक के बारे में है कुछ strcmp बुलाया। 217 00:10:18,980 --> 00:10:22,705 >> अब, हम चर्चा नहीं हो सकता है बड़े पैमाने पर इस समारोह। 218 00:10:22,705 --> 00:10:25,580 हम नहीं जा रहे हैं लेकिन क्योंकि यह है- हर कार्य के बारे में बात करने के लिए कि 219 00:10:25,580 --> 00:10:28,610 सी मानक में मौजूद library-- लेकिन वे सब आप के लिए उपलब्ध हो 220 00:10:28,610 --> 00:10:32,110 आप एक लेने के लिए विशेष रूप से अगर reference.cs50.net को देखो। 221 00:10:32,110 --> 00:10:35,000 और strcmp एक बहुत शक्तिशाली है अंदर मौजूद है कि समारोह 222 00:10:35,000 --> 00:10:38,070 स्ट्रिंग हेडर की एक शीर्षक है जो फ़ाइल, 223 00:10:38,070 --> 00:10:41,970 कार्यों के लिए समर्पित है कि फ़ाइल साथ कि काम और तार में हेरफेर। 224 00:10:41,970 --> 00:10:49,830 >> और विशेष रूप से, क्या strcmp करता है यह दो तारों के मूल्यों की तुलना। 225 00:10:49,830 --> 00:10:54,160 इसलिए मैं गलती विभाजन के बारे में हूँ एक कॉल पर ऐसा लगता है strcmp करने के लिए। 226 00:10:54,160 --> 00:10:58,530 , मैं n मारा, और वास्तव में मैं संदेश मिलता है कार्यक्रम संकेत SIGSEGV के साथ समाप्त 227 00:10:58,530 --> 00:11:01,370 विखंडन दोष। तो अब मैं वास्तव में SEG गलती की है, 228 00:11:01,370 --> 00:11:06,479 और मेरा कार्यक्रम बहुत है ज्यादा प्रभावी ढंग से छोड़ दिया। 229 00:11:06,479 --> 00:11:07,770 इस कार्यक्रम का अंत है। 230 00:11:07,770 --> 00:11:10,370 यह खराब हो गई है, यह दुर्घटनाग्रस्त हो गया। 231 00:11:10,370 --> 00:11:14,740 तो एक बहुत कुछ नहीं था, लेकिन मैं वास्तव में काफी कुछ सीख किया 232 00:11:14,740 --> 00:11:16,747 इस छोटे से अनुभव से। 233 00:11:16,747 --> 00:11:17,580 मैं क्या सीखा है? 234 00:11:17,580 --> 00:11:22,020 खैर, मेरे कार्यक्रम दुर्घटनाओं तुरंत बहुत ज्यादा। 235 00:11:22,020 --> 00:11:26,300 मेरे कार्यक्रम पर दुर्घटनाओं एक strcmp करने के लिए कहते हैं, लेकिन मैं 236 00:11:26,300 --> 00:11:30,560 में किसी भी स्थानीय चर नहीं है मेरी यह विमान दुर्घटनाग्रस्त उस समय कार्यक्रम। 237 00:11:30,560 --> 00:11:37,320 तो क्या स्ट्रिंग, या तार, मैं संभवतः की तुलना हो सकती है। 238 00:11:37,320 --> 00:11:42,140 मैं किसी भी स्थानीय नहीं है, तो चर, तुम हो सकता है 239 00:11:42,140 --> 00:11:45,520 हो सकता है एक है कि मैं वहाँ have-- कि शंका सच हो सकता है, जो वैश्विक चर,। 240 00:11:45,520 --> 00:11:47,670 >> लेकिन आम तौर पर, ऐसा लगता है जैसे मैं तुलना कर रहा हूँ 241 00:11:47,670 --> 00:11:52,070 मौजूद नहीं है कि कुछ करने के लिए। 242 00:11:52,070 --> 00:11:54,130 तो चलो की जांच एक छोटे से आगे है। 243 00:11:54,130 --> 00:11:55,120 इसलिए मैं अपने स्क्रीन स्पष्ट करने के लिए जा रहा हूँ। 244 00:11:55,120 --> 00:11:57,536 मैं से बाहर छोड़ने के लिए जा रहा हूँ एक पल के लिए GDB वातावरण। 245 00:11:57,536 --> 00:12:01,300 और मैं ठीक है, सोच रहा हूँ, इसलिए वहाँ मेरे कार्यक्रम में कोई स्थानीय चर। 246 00:12:01,300 --> 00:12:06,444 मैं पारित करने के लिए माना जाता रहा हूँ हो सकता है अगर मुझे आश्चर्य है एक कमांड लाइन तर्क के रूप में एक स्ट्रिंग में। 247 00:12:06,444 --> 00:12:07,610 तो चलो बस इस परीक्षण से बाहर जाने। 248 00:12:07,610 --> 00:12:09,020 मैंने पहले ऐसा नहीं किया है। 249 00:12:09,020 --> 00:12:14,244 >> मैं इस कार्यक्रम को चलाने हो सकता है अगर है, तो चलो देखते हैं एक कमांड लाइन तर्क के साथ यह काम करता है। 250 00:12:14,244 --> 00:12:16,140 हं, वहाँ कोई विभाजन गलती। 251 00:12:16,140 --> 00:12:17,870 यह सिर्फ मैं यह समझ से बाहर है कि मुझे बताया था। 252 00:12:17,870 --> 00:12:19,170 इसलिए हो सकता है कि तय यहाँ है। 253 00:12:19,170 --> 00:12:27,560 मैं वापस जाने के लिए और यदि और वास्तव में, पर देखो buggy1.c के लिए वास्तविक स्रोत कोड, 254 00:12:27,560 --> 00:12:31,180 मैं क्या कर रहा हूँ के रूप में हालांकि ऐसा लगता है मैं बिना strcmp के लिए एक फोन कर रहा हूँ 255 00:12:31,180 --> 00:12:34,010 वास्तव में argv [1] से मौजूद है कि क्या जाँच। 256 00:12:34,010 --> 00:12:36,730 यह वास्तव में है buggy1.c के लिए स्रोत कोड। 257 00:12:36,730 --> 00:12:38,855 इसलिए मैं वास्तव में क्या करने की जरूरत अपने कार्यक्रम तय करने के लिए यहां करते हैं, 258 00:12:38,855 --> 00:12:40,835 यह मानते हुए कि मेरे पास है है, मेरे सामने दाखिल 259 00:12:40,835 --> 00:12:44,740 सिर्फ बनाने के लिए एक जांच में जोड़ने के लिए सुनिश्चित करें कि argc 2 के बराबर है। 260 00:12:44,740 --> 00:12:47,780 तो इस उदाहरण, फिर मैं ने कहा, जैसे ठीक है, एक छोटा सा काल्पनिक है? 261 00:12:47,780 --> 00:12:49,840 आप आम तौर पर करने के लिए नहीं जा रहे हैं गलती से अपने स्रोत कोड को नष्ट 262 00:12:49,840 --> 00:12:51,820 और उसके बाद की कोशिश है और कार्यक्रम डिबग। 263 00:12:51,820 --> 00:12:53,120 लेकिन उम्मीद है, यह दिया आप एक उदाहरण 264 00:12:53,120 --> 00:12:55,120 चीजों की तरह की है कि आप के बारे में सोच किया जा सकता है 265 00:12:55,120 --> 00:12:56,610 के रूप में आप अपने प्रोग्राम डिबगिंग रहे हैं। 266 00:12:56,610 --> 00:12:58,760 >> यहां मामलों के राज्य क्या है? 267 00:12:58,760 --> 00:13:00,510 क्या चर मुझे क्या करना है मेरे लिए सुलभ है? 268 00:13:00,510 --> 00:13:03,600 वास्तव में, जहां मेरे प्रोग्राम है क्या लाइन पर, दुर्घटनाग्रस्त, 269 00:13:03,600 --> 00:13:05,240 क्या कार्य करने के लिए क्या कॉल पर? 270 00:13:05,240 --> 00:13:06,952 सुराग किस तरह का है कि मुझे देता है? 271 00:13:06,952 --> 00:13:08,910 और कहा कि ठीक है मानसिकता की तरह है कि आप 272 00:13:08,910 --> 00:13:12,820 जब तुम में हो रही किया जाना चाहिए अपने कार्यक्रमों डीबगिंग के बारे में सोच रही है। 273 00:13:12,820 --> 00:13:13,820 >> मैं डौग लॉयड हूँ। 274 00:13:13,820 --> 00:13:16,140 इस CS50 है। 275 00:13:16,140 --> 00:15:08,642