제9장 C 프로그래밍 환경 TOPCIT (Test of Practical Competency in IT)

Slides:



Advertisements
Similar presentations
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
Advertisements

2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제3장 C 프로그래밍 환경.
고급 시스템 프로그래밍 제1장 소개 창병모 숙명여대 컴퓨터과학과.
1장 리눅스의 기본 개념과 프로그램 작성 리눅스의 기본 개념 시스템에 접속하기 리눅스의 프로그래밍 환경
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
제3장 게임기본모듈 Page 153 ~ 182.
Cross Compiler를이용한 커널 컴파일 및 포팅
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
컴퓨터 프로그래밍 기초 [Final] 기말고사
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
제9장 C 프로그래밍 환경 창병모
디버깅 환경 및 방법 Lecture #14.
QT 프로그래밍 발표: 김래영.
Ubiquitous Computing Practice - Part I (Installation) -
Java 기초 (Java JDK 설치 및 환경설정)
C / C++ Programming in multi platform
1. C++ 시작하기.
디버깅 환경 및 방법 Lecture #14.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
1장. 프로그래밍 언어, C 프로그래밍.
TCP/IP 응용 프로그램에 적용 가능한 다양한 소켓 옵션을 이해하고 활용한다.
WinCE Device Driver 실습 #3
Cross Compiler 설치.
Sungkyunkwan University OS Project Dongkun Shin
프로그래밍 랩 – 7주 리스트.
1주차: 프로그래밍언어란 무엇인가? C 언어란? C 프로그래밍을 위한 준비
Cross Compiler를이용한 커널 컴파일 및 포팅
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
Linux/UNIX Programming
Linux/UNIX Programming
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Device Driver 임베디드 시스템 I.
24장. 파일 입출력.
Kernel Programming Environment
Linux/UNIX Programming
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
인터넷응용프로그래밍 JavaScript(Intro).
작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
Homework 7… 마지막 수업시간까지 (실습) 매개변수로 입력 받아 처리할 수 있도록 수정해 보세요
Linux/UNIX Programming
Linux/UNIX Programming
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
( Windows Service Application Debugging )
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
DK-128 개발환경 설정 아이티즌 기술연구소
Lab 1. 시스템 호출을 이용하는 mycp.c mycphint1.c & mycphint2.c coding & compile & run 제출 방법 (집에서도 접속 가능합니다) 2 Electronic versions: multi.incheon.ac.kr ( )의.
GDB - GNU Debugger 김진용.
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
구조체(struct)와 공용체(union)
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
C.
숙제 작성 및 제출 과정 김진하 2008/03/14.
Homework #7 (1/3) 1. 다음 순서에 따라 수행하고, 그 과정의 화면을 캡쳐한다.
Docker Study 6~7.
7 생성자 함수.
Linux/UNIX Programming
Presentation transcript:

제9장 C 프로그래밍 환경 TOPCIT (Test of Practical Competency in IT)

9.1 컴파일러

gcc 컴파일러 gcc(GNU cc) 컴파일러 상업용 C 컴파일러(cc) 컴파일 -c 옵션 -o 옵션 $ gcc [-옵션] 파일 $ cc [-옵션] 파일 컴파일 $ gcc longest.c $ a.out // 실행 -c 옵션 $ gcc -c longest.c -o 옵션 $ gcc -o longest longest.o 혹은 $ gcc -o longest longest.c $ longest // 실행

단일 모듈 프로그램:longest.c debugging: strlen() debugging: gets() #include <stdio.h> #define MAXLINE 100 void copy(char from[], char to[]); char line[MAXLINE]; // 입력 줄 char longest[MAXLINE]; // 가장 긴 줄 /*입력 줄 가운데 가장 긴 줄 프린트 */ main() { int len; int max; max = 0; while (gets(line) != NULL) { len = strlen(line); if (len > max) { max = len; copy(line, longest); } if (max > 0) // 입력 줄이 있었다면 printf("…The logest…\n%s\n", longest); return 0; #include "copy.h" /* copy: from을 to에 복사; to가 충분히 크다고 가정*/ void copy(char from[], char to[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } debugging: strlen() debugging: gets()

다중 모듈 프로그램 단일 모듈 프로그램 다중 모듈 프로그램 코드의 재사용(reuse)이 어렵고, 여러 사람이 참여하는 프로그래밍이 어렵다 예를 들어 다른 프로그램에서 copy 함수를 재사용하기 힘들다 다중 모듈 프로그램 여러 개의 .c 파일들로 이루어진 프로그램 일반적으로 복잡하며 대단위 프로그램인 경우에 적합

다중 모듈 프로그램: 예 main 프로그램과 copy 함수를 분리하여 별도 파일로 작성 컴파일 main.c copy.c copy.h // 함수의 프로토타입을 포함하는 헤더 파일 컴파일 $ gcc -c main.c $ gcc -c copy.c $ gcc -o main main.o copy.o 혹은 $ gcc -o main main.c copy.c

main.c copy.c #include <stdio.h> #include <string.h> #include "copy.h" char line[MAXLINE]; // 입력 줄 char longest[MAXLINE]; // 가장 긴 줄 /*입력 줄 가운데 가장 긴 줄 프린트 */ main() { int len; int max; max = 0; while (fgets(line, MAXLINE, stdin) != NULL) { len = strlen(line); if (len > max) { max = len; copy(line, longest); } if (max > 0) // 입력 줄이 있었다면 printf("…The logest…\n%s\n", longest); return 0; #include "copy.h" /* copy: from을 to에 복사; to가 충분히 크다고 가정*/ void copy(char from[], char to[]) { int i; i = 0; while ((to[i] = from[i]) != ‘\0’) ++i; } copy.h #define MAXLINE 100 void copy(char from[], char to[]);

9.2 make 시스템

make 시스템의 필요성 다중 모듈 프로그램을 구성하는 일부 파일이 변경된 경우? 예 make 시스템 변경된 파일만 컴파일하고, 파일들의 의존 관계에 따라서 필요한 파일만 다시 컴파일하여 실행 파일을 만들면 좋다. 예 copy.c 소스 코드를 수정 목적 파일 copy.o 생성 실행파일을 생성 make 시스템 대규모 프로그램의 경우에는 헤더, 소스 파일, 목적 파일, 실행 파일의 모든 관계를 기억하고 체계적으로 관리하는 것이 필요 make 시스템을 이용하여 효과적으로 작업

메이크파일 메이크파일 $ make [-f 메이크파일] 실행 파일을 만들기 위해 필요한 파일들과 그들 사이의 의존 관 계, 만드는 방법 등을 기술 make 시스템은 메이크파일을 이용하여 파일의 상호 의존 관계를 파악하여 실행 파일을 쉽게 다시 만듬 $ make [-f 메이크파일] 옵션이 없으면 Makefile 혹은 makefile을 사용

메이크파일의 구성 메이크파일의 구성 형식 예: Makefile make 실행 대상리스트: 의존리스트 명령리스트 main: main.o copy.o gcc -o main main.o copy.o main.o: main.c copy.h gcc -c main.c copy.o: copy.c copy.h gcc -c copy.c make 실행 $ make 혹은 $ make main gcc -c main.c gcc -c copy.c gcc -o main main.o copy.o copy.c 파일이 변경된 후 $ touch copy.c $ make

9.3 디버거

gdb 가장 대표적인 디버거 gdb 사용을 위한 컴파일 gdb 주요 기능 gdb 실행 GNU debugger(gdb) 정지점(breakpoint) 설정 한 줄씩 실행 변수 접근 및 수정 함수 탐색 추적(tracing) gdb 사용을 위한 컴파일 -g 옵션을 이용하여 컴파일 $ gcc -g -o longest longest.c 다중 모듈 프로그램 $ gcc -g -o main main.c copy.c gdb 실행 $ gdb [실행파일] $ gdb main

gdb 기능 소스보기 : l(ist) l [줄번호] 지정된 줄을 프린트 l [파일명]:[함수명] 지정된 함수를 프린트 set listsize n 출력되는 줄의 수를 n으로 변경 (gdb) l copy 1 #include <stdio.h> 2 #include "copy.h" 3 /* copy: from을 to에 복사; to가 충분히 크다고 가정*/ 4 void copy(char from[], char to[]) 5 { 6 int i; 7 i = 0; 8 while ((to[i] = from[i]) != '\0') 9 ++i; 10 }

gdb 기능 정지점 : b(reak), clear, d(elete) b [파일:]함수 파일의 함수 시작부분에 정지점 설정 b n n번 줄에 정지점을 설정 b +n 현재 줄에서 n개 줄 이후에 정지점 설정 b -n 현재 줄에서 n개 줄 이전에 정지점 설정 info b 현재 설정된 정지점을 출력 clear 줄번호 해당 정지점을 삭제 d 모든 정지점을 삭제 (gdb) b 12 Breakpoint 1 at 0x8048426: file main.c, line 12. (gdb) b copy Breakpoint 2 at 0x80484c2: file copy.c, line 6. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x08048426 in main at main.c:12 2 breakpoint keep y 0x080484c2 in copy at copy.c:6

gdb 기능 프로그램 수행 변수 값 프린트: p(rint) r(un) 인수 명령줄 인수를 받아 프로그램 수행 k(ill) 프로그램 수행 강제 종료 n(ext) 멈춘 지점에서 다음 줄을 수행하고 멈춤 s(tep) n과 같은 기능 함수호출 시 함수내부로 진입 c(ontinue) 정지점을 만날 때 까지 계속 수행 u 반복문에서 빠져나옴 finish 현재 수행하는 함수의 끝으로 이동 return 현재 수행중인 함수를 빠져나옴 quit 종료 변수 값 프린트: p(rint) p [변수명] 해당 변수 값 프린트 p 파일명::[변수명] 특정 파일의 전역변수 프린트 p [함수명]::[변수명] 특정 함수의 정적 변수 프린트 info locals 현재 상태의 지역변수 리스트

gdb 기능 (gdb) r Starting program: /home/mysung/ulprog/main Breakpoint 1, main () at main.c:12 12 while (fgets(line, MAXLINE, stdin) != NULL) { (gdb) s _IO_fgets (buf=0x8049880 "", n=100, fp=0x49c125a0) at iofgets.c:37 37 { (gdb) n 42 if (n <= 0) (gdb) c Continuing. Merry X-mas ! Breakpoint 2, copy (from=0x8049880 "Merry X-mas !\n", to=0x8049800 "") at copy.c:6 6 i = 0; 7 while ((to[i] = from[i]) != '\0') (gdb) p from $8 = 0x8049880 "Merry X-mas !\n" (gdb) p to $9 = 0x8049800 "" 8 ++i; $10 = 0x8049800 "M"

gdb 기능 (gdb) c Continuing. Happy New Year ! Breakpoint 2, copy (from=0x8049880 "Happy New Year !\n", to=0x8049800 "Merry X-mas !\n") at copy.c:6 6 i = 0; (gdb) p from $11 = 0x8049880 “Happy New Year !\n” (gdb) n 7 While ((to[i] = from[i]) != ‘\0’) (gdb) p to $12 = 0x8049800 "Merry X-mas !\n" 8 ++i; $13 = 0x8049800 "Herry X-mas !\n“ ^D …The longest… [Inferior 1 (process 17746) exited normally]

DDD(Data Display Debugger) gdb를 위한 그래픽 사용자 인터페이스 http://www.gnu.org/software /ddd 정지점을 설정 소스코드의 원하는 위치에 커 서를 이동하고 상 Break 버튼 Next나 Step 같은 명령어 버 튼을 이용하여 한 줄씩 실행 하단에는 gdb 명령어 입력 창

Next: 한 줄 진행

Cont: 계속 진행

Up: 함수 호출자 보기