1 00:00:00,000 --> 00:00:05,640 2 00:00:05,640 --> 00:00:06,830 >> DOUG 로이드 : 좋아 GDB. 3 00:00:06,830 --> 00:00:08,480 정확히 무엇입니까? 4 00:00:08,480 --> 00:00:11,310 서 그래서 GDB, GNU 디버거, 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에서 작업하는 경우 IDE는, 당신은이 작업을 수행 할 필요가 없습니다. 18 00:00:51,250 --> 00:00:53,550 하지만 당신은하지 않은 경우 CS50 IDE에서 작업 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의 IDE를 사용하면 25 00:01:09,650 --> 00:01:15,400 그래픽 디버거를 사용할 수 있습니다 그는 IDE에 내장되어 있습니다. 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--의 LS에, 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 >> 제 B는, 어느 휴식을위한 짧다. 39 00:01:55,200 --> 00:01:58,690 그리고 당신은 B를, 당신이 일반적으로 입력 한 후 함수의 이름을 입력 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 무엇 B, 또는 휴식, 수행 입니다 그것은 당신의 프로그램을 할 수 있습니다 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 일반적으로, 당신은 점 슬래시를 입력 무엇이든 프로그램의 이름은, Enter 키를 누르된다 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 정말 일을 느리게 할 수 있도록 아래 B에 브레이크 포인트를 설정하여, 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 당신은 모든 명령 줄을 지정 R, 또는 실행을 취함으로써 인수, 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 국내 총생산 (GDP) 환경의 내부. 62 00:03:04,970 --> 00:03:07,540 그러니 빨리 저를 보자 그 중 일부를 통해 이동합니다. 63 00:03:07,540 --> 00:03:11,320 >> 먼저, 다음의 약자 N이며 당신은, 다음 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 당신은 p 또는 인쇄를 입력 할 수 있습니다, 다음 변수 이름. 86 00:04:12,507 --> 00:04:15,090 그리고는, 당신을 인쇄한다 GDB 환경의 내부, 87 00:04:15,090 --> 00:04:19,110 변수의 이름, 그 있는데 ... 가구 있구만에게 변수의 값을 변명 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 다음은 인 BT는있다 역 추적에 대한 짧은. 95 00:04:37,770 --> 00:04:41,680 이제 일반적으로, 특히 초기 CS50에서, 96 00:04:41,680 --> 00:04:44,450 당신은 정말 기회가되지 않습니다 BT, 또는 역 추적을 사용하려면, 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 함수를 호출 F, 함수 h를 호출 g. 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 당신이 어디에 당신을 가지고 일에 대해 당신은 BT, 또는 다시 추적을 입력 할 수 있습니다으로 죠, 111 00:05:27,210 --> 00:05:32,370 그리고, H, G에서 주요 F 인쇄합니다 다른 정보와 함께하는 112 00:05:32,370 --> 00:05:35,984 당신에게 단서를 제공하는 확인 주 라는 F가 호출 G F, G, H라는 113 00:05:35,984 --> 00:05:37,900 그리고 그 곳의 I 현재 내 프로그램입니다. 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 IDE와는 모양을 가지고있다. 131 00:06:30,740 --> 00:06:33,155 좋아, 그래서 우리는 여기에있어 내 CS50 IDE 환경 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 LS와 함께, 우리는 내가를 볼 수 있습니다 소스 파일의 몇 가지있다 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 나는 점 슬래시를 입력 버그, 나는 Enter 키를 누르십시오. 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 모든 단일 C 프로그램에 존재? 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 그리고 다시, 난 그냥 입력 할 수 있습니다 대신 B의 메인 휴식. 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 당신은 어떤 것, 제어 U 걸릴 수 있습니다 모든 것을 삭제하고 다시 가져 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 그리고, 난 그냥 노력하고있어 및 R, 프로그램을 실행합니다. 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 이제가 무엇인지 살펴 보자 이미 우리를 위해 초기화. 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 C 표준에 존재 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 string.h 헤더의 헤더는 파일, 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 세그먼트 오류. 그래서 지금 실제로 세그 폴트 한 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 어쩌면이다 내가 거기에 잔 마셔요 것으로 추측 사실이 될 수있는 전역 변수. 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