30
C 프프프프프 프프 컴컴컴컴컴컴 컴컴컴

C 프로그래밍 도구

  • Upload
    roana

  • View
    84

  • Download
    6

Embed Size (px)

DESCRIPTION

C 프로그래밍 도구. 컴퓨터공학과 강성인. vi 에디터의 다중 파일 편집. 파일 버퍼 : 여러 파일을 vi 에디터에서 열었을 때 각 파일들은 파일버퍼에 열려 있다 . 파일버퍼 관련 명령 :ls - 버퍼의 내용을 나열 :b[N] - N 번 버퍼로 이동 :bw[N] - N 번 버퍼를 삭제 , N 이 없으면 현재의 버퍼 삭제 :bf, :bl - 첫 번째 , 마지막 버퍼로 이동 :sb[N] - 창을 수평 분할하여 N 번 버퍼를 로드. vi 에디터의 다중 창 사용. 다중 창 기능 - PowerPoint PPT Presentation

Citation preview

Page 1: C 프로그래밍 도구

C 프로그래밍 도구

컴퓨터공학과강성인

Page 2: C 프로그래밍 도구

vi 에디터의 다중 파일 편집

파일 버퍼: 여러 파일을 vi 에디터에서 열었을 때 각 파일들은 파일버퍼에 열려 있다 .

파일버퍼 관련 명령 :ls - 버퍼의 내용을 나열 :b[N] - N 번 버퍼로 이동 :bw[N] - N 번 버퍼를 삭제 , N 이 없으면 현재의 버퍼 삭제 :bf, :bl - 첫 번째 , 마지막 버퍼로 이동 :sb[N] - 창을 수평 분할하여 N 번 버퍼를 로드

Page 3: C 프로그래밍 도구

vi 에디터의 다중 창 사용

다중 창 기능: vi 에디터의 화면을 분할해서 사용하는 방법

다중 창 기능 관련 명령 Ctrl+w n : 새로운 수평 창 생성 Ctrl+w s : 현재파일을 두개의 수평창으로 나눔 Ctrl+w v : 새로운 수직창 생성 Ctrl+ww : 창을 순차적으로 이동 Ctrl+wr : 창을 순차적으로 위치이동 Ctrl+w _ : 수평분할에서 창의 크기 최대화 Ctrl+w | : 수직분할에서 창의 크기 최대화 Ctrl+w = : 창의크기를 모두 균등하게 분할

Page 4: C 프로그래밍 도구

11.1 C 언어

번역 ( 컴파일 ): cc or gcc, make

디버깅 : dbx, gdb

라이브러리 유지 : ar 프로파일링 : prof ( 수행감시 최적화 )

소스코드를 지원하는 도구 : sccs

Page 5: C 프로그래밍 도구

gcc

GNU 에서 만든 c 컴파일러 현전하는 컴파일러 중 가장 많은 CPU 아키텍처를 지원 , ARM, DEC,

AVR, i386, SPARC, … gcc 는 실제 컴파일 과정을 담당하는 것이 아닌 , 전처리기 , c

컴파일러 , 어셈블러 , 링커를 각각 호출하는 역할을 한다 . /usr/lib/gcc-lib/i386-redhat-linux/3.2.2

전처리기cpp0test.c test.i C 컴파일러

cc1

test.s어셈블리

파일

어셈블러as

test.o오브젝트

파일

링커ld

test.exe실행파일

gcc 컴파일 과정

Page 6: C 프로그래밍 도구

gcc 옵션

-S 어셈블리 파일로 컴파일 , filename.s 파일 생성

-c어셈블러 (as) 로 어셈블까지만 수행 , 링크는 수행하지 않는다 . filename.o 파일 생성

-w 모든 경고메시지 제거

-W -Wall-Wall 은 모든 모호한 문법에 대한 경고 메시지 출력 , -W 합법적이지만 모호한 코딩에 대한 부가적인 정보제공

-O[ 최적화레벨 ] 최적화 레벨 : 0, 1, 2, 3, s

-ggdb 에게 제공하는 정보를 바이너리에 삽입한다 . gdb 로 디버깅 시에 소스를 보면서 디버깅이 가능해진다 .

-L, -l-L[ 라이브러리 디렉토리 ] : 라이브러리를 찾을 디렉토리 지정 ,-l[ 라이브러리 이름 ] : 링크할 라이브러리 지정

-o 실행 파일 이름 지정

Page 7: C 프로그래밍 도구

11.2 단일모듈 프로그램

프로그램 작성 및 실행

소스 파일 작성 :emacs, vi 편집기 사용

번역 (Compile) 링크 (Link) 실행

프로그램 번역 컴파일 하기

gcc SourceFile -o ExecutableFile -o : 실행 파일 이름 명시 ,

디폴트는 a.out ( 예 ) $ gcc reserve.c

a.out 실행파일 생성 $ gcc reserve.c -o reverse reverse 실행파일 생성

에러발생 메시지 출력 , 실행파일 생성 안됨

에러 수정 후 컴파일 성공 실행 파일 생성

Page 8: C 프로그래밍 도구

11.3 다중 모듈 프로그램

다중모듈 프로그램 새 프로그램 개발 시 기존의 프로그램

활용 cut and paste : 동일코드중복 다중모듈 프로그램 : 함수 공유 ,

유용 재사용 함수

특정 기능 수행부분을 별도로 독립시켜 번역

목적 모듈끼리 링크 시켜 실행 (reusable)

목적 모듈 작성 : gcc 의 -c 옵션 사용

목적 모듈 링크 gcc -c SourceList : -c 옵션 사용

gcc -c reverse.c main1.c reverse.o, main.o 목적모듈 생성

gcc reverse.o main1.o -o main1 main1 실행파일 생성

Page 9: C 프로그래밍 도구

$gcc -c palindrome.c$gcc -c main2.c$gcc reverse.o palindrome.o main2.o -o main2$ls -l reverse.o palindrome.o main2.o main2-rwxr-xr-x 1 sikang sikang 12172 May 28 22:35 main2*-rw-r--r-- 1 sikang sikang 964 May 28 22:35 main2.o-rw-r--r-- 1 sikang sikang 788 May 28 22:35 palindrome.o-rw-r--r-- 1 sikang sikang 772 May 28 21:46 reverse.o$main2palindrome("cat")=0palindrome("noon")=1

Page 10: C 프로그래밍 도구

11.3 다중 모듈 프로그램

Ld 여러 목적모듈 링크 시에 호출되는 유닉스의 독립적인 로더 명시된 목적모듈과 라이브러리 모듈을 서로 링크하여 실행파일 생성

ld -n -Lpath* objModule* library* -lx* [ -o outputfile] -o : 실행파일이름 지정 , 디폴트는 a.out -n : 동적 링크 모듈에 반대되는 독립적 수행파일 생성 -lx : ld 의 표준 디렉토리 (/lib, /usr/lib, /usr/local/lib) 탐색

libx.a 이름의 라이브러리 탐색 -L : -lx 옵션에 탐색경로 추가 ( 위 세 경로 외 )

Ex) ld –n /lib/crt0.o main1.o reverse.o –lc –o main1목적모듈 : /lib/crt0.o라이브러리모듈 : /lib/libc.a

Page 11: C 프로그래밍 도구

11.3 다중 모듈 프로그램

다중모듈 프로그램 유지 make

유닉스 파일 의존 시스템 목적모듈과 실행 파일의 최신버전의 유지를 보증

ar 유닉스 파일 보관 시스템 목적 모듈을 저장

sccs (Source Code Control System) 유닉스 소스 코드 관리 시스템 소스 파일과 헤더 파일들의 각 버전을 추적

Page 12: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

기능 다중 모듈 프로그램의 재사용을

유지하고 , 프로그램 수정에 대한 재번역을 최소화

makefile 파일의 상호 의존 관계의 목록

make make 파일을 참조하여 파일을

최신버전으로 개정

make [ -f makefile ] -f : 파일이름 명시 ,

기본이름 : makefile 복수개의 파일과 목적 파일 컴파일

makefile 이름에 제한이 없으나 파일 이름 뒤에 .make 표기 권장

Page 13: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

makefile 작성 및 규칙targetList : dependencyList

commandList

targetList : 목적 파일 목록 dependencyList : 의존 파일 목록 commandList: 명령어 목록

main1 : main1.o reverse.o

gcc main1.o reverse.o -o main1

main1.o : main1.c reverse.h

gcc -c main1.c

reverse.o : reverse.c reverse.h

gcc -c reverse.c

Page 14: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

Make 규칙 순서( 예 )

규칙을 순서대로 조사하면서 상호 의존 트리를 작성 make 는 leaf노드에서 root노드까지 진행하면서 부모 노드의 마지막

수정시간이 자식노드의 수정시간보다 이전이거나 없으면 명령어 목록대로 수행

main1

main1.o reverse.o

main1.c reverse.h reverse.c reverse.h

Page 15: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

make 실행( 예 ) $ make [-f main2.make] makefile 이 아닌 경우

결과 ) cc -c main2.c cc -c palindrome.c cc main2.o reverse.o palindrome.o –o main2

Make Rules: make 시스템의 추론기능 컴파일 명령의 제거 가능

cc –c *.c 소스파일명의 제거 가능

*.c *.o

Page 16: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

Make Rules: make 시스템의 추론기능 컴파일 명령의 제거 가능

cc –c *.c

main2: main2.o reverse.o palindrome.occ main2.o reverse.o palindrome.o -o main2

main2.o: main2.c palindrome.hcc –c main2.c => 생략가능

reverse.o: reverse.c reverse.hcc –c reverse.c => 생략가능

palindrome.o: palindrome.c palindrome.h reverse.hcc –c palindrome.c => 생략가능

Page 17: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

Make Rules: make 시스템의 추론기능 소스파일명의 제거 가능

*.c *.omain2: main2.o reverse.o palindrome.o

cc main2.o reverse.o palindrome.o -o main2main2.o: main2.c palindrome.hreverse.o: reverse.c reverse.hpalindrome.o: palindrome.c palindrome.h reverse.h

Page 18: C 프로그래밍 도구

11.4 유닉스 파일 의존 시스템 : Make

touch 지정된 파일의 수정일자를 현재의 시스템 시간으로 변경 touch -c { fileName } +

-c : 지정한 파일이 없을 경우 파일 생성 금지 매크로 (Macros)

make 에서 지원하는 기능 make 파일 내에 모든 $(token) 는 replacementText 로 대치

token = replacementText Ex) CFLAGS= -o CFLAGS= -p

그 외 정보들 $ man make

Page 19: C 프로그래밍 도구

11.5 유닉스 파일 보관 시스템 : AR

makefile 의 단점큰 프로젝트는 수백 개의 목적

모듈을 필요 makefile 규칙 내에 너무 많은 목적모듈을 명시

ar (archive) 유틸리티: 목적모듈을 구성하고 그룹화

시키기 위한 유닉스 파일 보관 시스템 librarian 으로 알려짐

.a 확장자를 갖는 특별한 archive 형식의 파일 생성

archive 파일에 어떤 유형의 파일이라도 추가하고 , 삭제하고 , 바꾸고 , 덧붙인다 .

archive 의 목차 (table of content)를 제공한다 .

ar 사용자가 archive 를

생성하고 , 다룰 수 있게 한다 .

archive 파일로부터 필요로 하는 목적 모듈은 필요에 따라 자동적으로 링크

목적모듈 링크 시에 유틸리티에 대한 매개변수 감소로 효율성 증대

Page 20: C 프로그래밍 도구

11.5 유닉스 파일 보관 시스템 : AR

ar key archiveName fileName + archiveName

Archive 파일명 , .a 로 끝나도록 되어 있음 key

d archive 로부터 파일을 삭제q 이미 존재하고 있어도 archive 파일의 끝에 덧붙임r 파일이 archive 내에 존재하지 않으면 추가하고 , 존재하면 현재 버전을 치환t 표준출력으로 archive 의 목차를 보여 줌x archive 로부터 파일들을 현재의 디렉토리로 복사 v 긴 출력으로 보여 줌

Page 21: C 프로그래밍 도구

11.5 유닉스 파일 보관 시스템 : AR

Archive 의 생성 첫 번째 파일 추가 시에 자동 생성

파일의 추가 명명된 archive 에 파일을 추가 , 없을 시 생성 ar r archiveName { fileName } +

파일 덧붙이기 기존의 archive 파일에 목록이 있어도 무조건 덧붙임 ar q archiveName { fileName } +

기존 파일의 존재 여부를 검사 하지 않아 빠름

Page 22: C 프로그래밍 도구

11.5 유닉스 파일 보관 시스템 : AR

목차 얻기 ar t archiveName { fileName } +

파일 제거 ar d archiveName { fileName }+

파일 추출 archive 로부터 파일들을 현재의 디렉토리로 복사 , 디폴트는 모든 파일

추출 ar x archiveName { fileName } +

Page 23: C 프로그래밍 도구

$cc -c reverse.c palindrome.c main2.c

$ar r string.a reverse.o palindrome.o$ar t string.areverse.opalindrome.o$cc main2.o string.a -o main2$main2palindrome("cat")=0palindrome("noon")=1$ar d string.a reverse.o$ar t string.apalindrome.o

$ar r string.a reverse.o$ar t string.apalindrome.oreverse.o$rm palindrome.o reverse.orm: remove regular file `palindrome.o'?

yrm: remove regular file `reverse.o'? y$ls *.omain2.o$ar x string.a reverse.o$ls *.omain2.o reverse.o

Page 24: C 프로그래밍 도구

11.5 유닉스 파일 보관 시스템 : AR

Make 시스템을 이용한 archive 유지

make 시스템은 자동적으로 archive 동작을 하는 내장 규칙을 가지고 있음

makefile 내에 목적 모듈을 대신하여 archive 파일을 선언 할 수 있음=>Archive 의 이름 뒤에 목적 파일 이름을 괄호 안에 위치

archive 파일의 유지 상태에 따라 makefile 이 자동적으로 유지

main2: main2.o string.a(reverse.o) string.a(palindrome.o)cc main2.o string.a –o main2

main2.o: palindrome.hstring.a(reverse.o): reverse.hstring.a(palindrome.o): palindrome.h reverse.h

Page 25: C 프로그래밍 도구

11.5 유닉스 파일 보관 시스템 : AR

Archive 순서 정하기 기본적으로 목적 모듈의 순서는 무관함 목적모듈 생성에 있어서 순서에 영향을 받을 경우 ( 구형 )

loader 와 tsort 를 이용해 archive 파일 내의 순서 정렬 ar cr string2.a `lorder string.a | tsort`

목차 (A table of Contents) 생성 ranlib : 명시된 archive 에 목차를 추가

archive 내에 _SYMDEF 라는 엔트리를 삽입함

ranlib archive + 예 ) ranlib string.a

Page 26: C 프로그래밍 도구

매크로의 사용 매크로의 정의

NAME=string 매크로 사용규칙

매크로의 참조: 소괄호나 중괄호로 둘러싸고 앞에 ‘ $’ 를 붙인다 .

정의되지 않은 매크로를 참조할 때는 NULL 문자열로 치환된다 .

중복된 정의는 최후에 정의된 값을 사용한다 .

매크로 정의 시 이전에 정의된 매크로를 참조해서 정의할 수 있다 .

NAME=stringNAME= my $(NAME)

미리 정의된 매크로AS = as ( 어셈블러 )ASFLAGS = ( 어셈블러 옵션 )CC = cc(or gcc) (C 컴파일러 )CFLAGS = (C 컴파일러의 옵션 )CXX = g++(C++ 컴파일러 )LD = ld ( 링크 )LDFLAGS = ( 링크 옵션 )CPP = cc –E ( 전처리기 )

내부 매크로$* : 확장자가 없는 현재 파일의 목표 파일$@ : 현재의 목표파일$^ : 현재 목표파일의 종속항목 리스트$< : 현재의 목표파일 보다 더 최근에 갱신된 종속항목리스트 (확장자 규칙 )

$? : 현재의 목표파일 보다 더 최근에 갱신된 종속항목리스트

Page 27: C 프로그래밍 도구

main2: main2.o reverse.o palindrome.occ main2.o reverse.o palindrome.o -o main2

main2.o: main2.c palindrome.hcc –c main2.c

reverse.o: reverse.c reverse.hcc –c reverse.c

palindrome.o: palindrome.c palindrome.h reverse.hcc –c palindrome.c

CC = gccCFLAGS = -W -WallTARGET = main2OBJECTS = main2.o reverse.o palindrome.o

$(TARGET): $(OBJECTS) $(CC) $(CFLAGS) $^ -o $@

main2.o: palindrome.hreverse.o: reverse.hpalindrome.o: palindrome.h reverse.h

Make 파일 예제

Page 28: C 프로그래밍 도구

11.9 유닉스 디버거 : gdb 디버그를 위한 프로그램 준비

: cc 의 -g 옵션으로 프로그램을 번역 gcc 에서도 – g 옵션

⇒ 목적 모듈 내에 여러 디버깅 정보 포함

실행방법 gdb [ 프로그램명 ] gdb [ 프로그램명 ] [ 실행중인 PI

D] 종료방법

: Ctrl + d

소스보기 : ll [ 행번호 ]l [ 파일명 ]:[ 함수명 ]

set listsize 20 : 출력되는 행의 수를 20 으로 변경

브레이크 포인트 : b, cl, db file.c:func : file.c 파일의 func 함수의 시작 부분에 설정b 10 : 10 행에 설정b +2 : 현재 행에서 2 개 행 이후 지점에 설정b -2 : 현재 행에서 2 개 행 이전 지점에 설정info b: 현재 설정된 브레이크 포인트를 출력브레이크 포인트 지우는 명령 : cl 포인트어드레스d : 모든 브레이크 포인트 삭제

Page 29: C 프로그래밍 도구

프로그램 수행 r arg1 arg2 : arg1 과 arg2

를 인자로 프로그램 수행 k : 프로그램 수행 종료 s : 브레이크 포인트에서 멈춘

프로그램에서 현재 행을 수행하고 멈춘다 .

n : s 와 같은 기능이나 브레이크 포인트에 있는 함수 호출 시 내부로 들어가지 않고 바로 수행

c : 브레이크 포인트를 만날 때 까지 계속 수행

u : 반복문에서 빠져나온다 . finish : 현재 수행하는 함수의 끝으로 이동한다 .

return : 현재 수행중인 함수를 빠져 나온다 .

Page 30: C 프로그래밍 도구

변수 값 추적 p /[ 출력형식 ] [변수명 ] :

해당 변수 값 p ‘파일명’ ::[변수명 ] : 특정

파일의 전역변수 p [ 함수명 ]::[변수명 ]: 특정

함수의 static 변수 info locals : 현재 상태의

지역변수 리스트

출력형식 t : 2 진수로 출력 o : 8 진수로 출력 d : 부호가 있는 10 진수 (int)

로 출력 u : 부호가 없는 10 진수 (unsi

gned int) 로 출력 x : 16 진수로 출력 c : 최초 1 바이트 값을 문자형으로 출력

f : 부동 소수점 값 형식으로 출력