1 / 30

C 프로그래밍 도구

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

roana
Télécharger la présentation

C 프로그래밍 도구

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C프로그래밍 도구 컴퓨터공학과 강성인

  2. vi 에디터의 다중 파일 편집 • 파일 버퍼 : 여러 파일을 vi에디터에서 열었을 때 각 파일들은 파일버퍼에 열려 있다. • 파일버퍼 관련 명령 • :ls - 버퍼의 내용을 나열 • :b[N] - N번 버퍼로 이동 • :bw[N] - N번 버퍼를 삭제, N이 없으면 현재의 버퍼 삭제 • :bf, :bl - 첫 번째, 마지막 버퍼로 이동 • :sb[N] - 창을 수평 분할하여 N번 버퍼를 로드

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

  4. 11.1 C 언어 • 번역(컴파일): cc or gcc, make • 디버깅: dbx, gdb • 라이브러리 유지: ar • 프로파일링: prof (수행감시 최적화) • 소스코드를 지원하는 도구: sccs

  5. test.s 어셈블리 파일 전처리기 cpp0 C 컴파일러 cc1 test.c test.i test.o 오브젝트 파일 test.exe 실행 파일 링커 ld 어셈블러 as gcc 컴파일 과정 gcc • GNU에서 만든 c 컴파일러 • 현전하는 컴파일러 중 가장 많은 CPU 아키텍처를 지원, ARM, DEC, AVR, i386, SPARC, … • gcc는 실제 컴파일 과정을 담당하는 것이 아닌, 전처리기, c컴파일러, 어셈블러, 링커를 각각 호출하는 역할을 한다. • /usr/lib/gcc-lib/i386-redhat-linux/3.2.2

  6. gcc 옵션

  7. 프로그램 작성 및 실행 소스 파일 작성 :emacs, vi편집기 사용 번역(Compile) 링크(Link) 실행 프로그램 번역 컴파일 하기 gcc SourceFile -o ExecutableFile -o : 실행 파일 이름 명시, 디폴트는 a.out (예) $ gcc reserve.c  a.out 실행파일 생성 $ gcc reserve.c -o reverse  reverse 실행파일 생성 에러발생  메시지 출력, 실행파일 생성 안됨 에러 수정 후 컴파일 성공  실행 파일 생성 11.2 단일모듈 프로그램

  8. 다중모듈 프로그램 새 프로그램 개발 시 기존의 프로그램 활용 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 실행파일 생성 11.3 다중 모듈 프로그램

  9. $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 $main2 palindrome("cat")=0 palindrome("noon")=1

  10. 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

  11. 11.3 다중 모듈 프로그램 • 다중모듈 프로그램 유지 • make • 유닉스 파일 의존 시스템 • 목적모듈과 실행 파일의 최신버전의 유지를 보증 • ar • 유닉스 파일 보관 시스템 • 목적 모듈을 저장 • sccs(Source Code Control System) • 유닉스 소스 코드 관리 시스템 • 소스 파일과 헤더 파일들의 각 버전을 추적

  12. 기능 다중 모듈 프로그램의 재사용을 유지하고, 프로그램 수정에 대한 재번역을 최소화 makefile 파일의 상호 의존 관계의 목록 make make파일을 참조하여 파일을 최신버전으로 개정 make [ -f makefile ] -f : 파일이름 명시, 기본이름 : makefile 복수개의 파일과 목적 파일 컴파일 makefile 이름에 제한이 없으나 파일 이름 뒤에 .make 표기 권장 11.4 유닉스 파일 의존 시스템: Make

  13. 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 11.4 유닉스 파일 의존 시스템: Make

  14. main1 reverse.o main1.o main1.c reverse.h reverse.c reverse.h 11.4 유닉스 파일 의존 시스템: Make • Make 규칙 순서 (예) • 규칙을 순서대로 조사하면서 상호 의존 트리를 작성 • make는 leaf노드에서 root노드까지 진행하면서 부모 노드의 마지막 수정시간이 자식노드의 수정시간보다 이전이거나 없으면 명령어 목록대로 수행

  15. 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

  16. 11.4 유닉스 파일 의존 시스템: Make • Make Rules: make 시스템의 추론기능 • 컴파일 명령의 제거 가능 • cc –c *.c main2: main2.o reverse.o palindrome.o cc main2.o reverse.o palindrome.o -o main2 main2.o: main2.c palindrome.h cc –c main2.c => 생략가능 reverse.o: reverse.c reverse.h cc –c reverse.c => 생략가능 palindrome.o: palindrome.c palindrome.h reverse.h cc –c palindrome.c => 생략가능

  17. 11.4 유닉스 파일 의존 시스템: Make • Make Rules: make 시스템의 추론기능 • 소스파일명의 제거 가능 • *.c  *.o main2: main2.o reverse.o palindrome.o cc main2.o reverse.o palindrome.o -o main2 main2.o:main2.cpalindrome.h reverse.o: reverse.c reverse.h palindrome.o: palindrome.c palindrome.h reverse.h

  18. 11.4 유닉스 파일 의존 시스템: Make • touch • 지정된 파일의 수정일자를 현재의 시스템 시간으로 변경 • touch -c { fileName } + -c : 지정한 파일이 없을 경우 파일 생성 금지 • 매크로(Macros) • make에서 지원하는 기능 • make 파일 내에 모든 $(token)는 replacementText로 대치 • token = replacementText • Ex) CFLAGS= -o  CFLAGS= -p • 그 외 정보들 • $ man make

  19. makefile의 단점 큰 프로젝트는 수백 개의 목적 모듈을 필요  makefile 규칙 내에 너무 많은 목적모듈을 명시 ar (archive) 유틸리티 : 목적모듈을 구성하고 그룹화 시키기 위한 유닉스 파일 보관 시스템  librarian으로 알려짐 .a 확장자를 갖는 특별한 archive 형식의 파일 생성 archive 파일에 어떤 유형의 파일이라도 추가하고, 삭제하고, 바꾸고, 덧붙인다. archive의 목차(table of content)를 제공한다. ar 사용자가 archive를 생성하고, 다룰 수 있게 한다. archive 파일로부터 필요로 하는 목적 모듈은 필요에 따라 자동적으로 링크 목적모듈 링크 시에 유틸리티에 대한 매개변수 감소로 효율성 증대 11.5 유닉스 파일 보관 시스템: AR

  20. 11.5 유닉스 파일 보관 시스템: AR • arkeyarchiveNamefileName + • archiveName • Archive 파일명, .a로 끝나도록 되어 있음 • key d archive로부터 파일을 삭제 q 이미 존재하고 있어도 archive 파일의 끝에 덧붙임 r 파일이 archive 내에 존재하지 않으면 추가하고 , 존재하면 현재 버전을 치환 t 표준출력으로 archive의 목차를 보여 줌 x archive로부터 파일들을 현재의 디렉토리로 복사 v 긴 출력으로 보여 줌

  21. 11.5 유닉스 파일 보관 시스템: AR • Archive의 생성 • 첫 번째 파일 추가 시에 자동 생성 • 파일의 추가 • 명명된 archive에 파일을 추가, 없을 시 생성 • ar r archiveName { fileName } + • 파일 덧붙이기 • 기존의 archive 파일에 목록이 있어도 무조건 덧붙임 • ar q archiveName { fileName } + • 기존 파일의 존재 여부를 검사 하지 않아 빠름

  22. 11.5 유닉스 파일 보관 시스템: AR • 목차 얻기 • ar t archiveName { fileName } + • 파일 제거 • ar d archiveName { fileName }+ • 파일 추출 • archive로부터 파일들을 현재의 디렉토리로 복사, 디폴트는 모든 파일 추출 • ar x archiveName { fileName } +

  23. $cc -c reverse.c palindrome.c main2.c $ar r string.a reverse.o palindrome.o $ar t string.a reverse.o palindrome.o $cc main2.o string.a -o main2 $main2 palindrome("cat")=0 palindrome("noon")=1 $ar d string.a reverse.o $ar t string.a palindrome.o $ar r string.a reverse.o $ar t string.a palindrome.o reverse.o $rm palindrome.o reverse.o rm: remove regular file `palindrome.o'? y rm: remove regular file `reverse.o'? y $ls *.o main2.o $ar x string.a reverse.o $ls *.o main2.o reverse.o

  24. 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.h string.a(reverse.o): reverse.h string.a(palindrome.o): palindrome.h reverse.h

  25. 11.5 유닉스 파일 보관 시스템: AR • Archive 순서 정하기 • 기본적으로 목적 모듈의 순서는 무관함 • 목적모듈 생성에 있어서 순서에 영향을 받을 경우(구형) • loader 와 tsort를 이용해 archive 파일 내의 순서 정렬 • ar cr string2.a `lorder string.a | tsort` • 목차(A table of Contents) 생성 • ranlib : 명시된 archive에 목차를 추가 • archive내에 _SYMDEF라는 엔트리를 삽입함 • ranlibarchive + • 예) ranlib string.a

  26. 매크로의 정의 NAME=string 매크로 사용규칙 매크로의 참조 : 소괄호나 중괄호로 둘러싸고 앞에 ‘$’를 붙인다. 정의되지 않은 매크로를 참조할 때는 NULL문자열로 치환된다. 중복된 정의는 최후에 정의된 값을 사용한다. 매크로 정의 시 이전에 정의된 매크로를 참조해서 정의할 수 있다. NAME=string NAME= my $(NAME) 미리 정의된 매크로 AS = as (어셈블러) ASFLAGS = (어셈블러 옵션) CC = cc(or gcc) (C 컴파일러) CFLAGS = (C 컴파일러의 옵션) CXX = g++(C++컴파일러) LD = ld (링크) LDFLAGS = (링크 옵션) CPP = cc –E (전처리기) 내부 매크로 $* : 확장자가 없는 현재 파일의 목표 파일 $@ : 현재의 목표파일 $^ : 현재 목표파일의 종속항목 리스트 $< : 현재의 목표파일 보다 더 최근에 갱신된 종속항목리스트(확장자 규칙) $? : 현재의 목표파일 보다 더 최근에 갱신된 종속항목리스트 매크로의 사용

  27. Make 파일 예제 main2: main2.o reverse.o palindrome.o cc main2.o reverse.o palindrome.o -o main2 main2.o: main2.c palindrome.h cc –c main2.c reverse.o: reverse.c reverse.h cc –c reverse.c palindrome.o: palindrome.c palindrome.h reverse.h cc –c palindrome.c CC = gcc CFLAGS = -W -Wall TARGET = main2 OBJECTS = main2.o reverse.o palindrome.o $(TARGET): $(OBJECTS) $(CC) $(CFLAGS) $^ -o $@ main2.o: palindrome.h reverse.o: reverse.h palindrome.o: palindrome.h reverse.h

  28. 디버그를 위한 프로그램 준비 : cc의 -g옵션으로 프로그램을 번역 gcc에서도 –g옵션 ⇒ 목적 모듈 내에 여러 디버깅 정보 포함 실행방법 gdb [프로그램명] gdb [프로그램명] [실행중인 PID] 종료방법 : Ctrl + d 소스보기 : l l [행번호] l [파일명]:[함수명] set listsize 20 : 출력되는 행의 수를 20으로 변경 브레이크 포인트 : b, cl, d b file.c:func : file.c 파일의 func 함수의 시작 부분에 설정 b 10 : 10행에 설정 b +2 : 현재 행에서 2개 행 이후 지점에 설정 b -2 : 현재 행에서 2개 행 이전 지점에 설정 info b: 현재 설정된 브레이크 포인트를 출력 브레이크 포인트 지우는 명령: cl포인트어드레스 d : 모든 브레이크 포인트 삭제 11.9 유닉스 디버거 : gdb

  29. 프로그램 수행 r arg1 arg2 : arg1과 arg2를 인자로 프로그램 수행 k : 프로그램 수행 종료 s : 브레이크 포인트에서 멈춘 프로그램에서 현재 행을 수행하고 멈춘다. n : s와 같은 기능이나 브레이크 포인트에 있는 함수 호출 시 내부로 들어가지 않고 바로 수행 c : 브레이크 포인트를 만날 때 까지 계속 수행 u : 반복문에서 빠져나온다. finish : 현재 수행하는 함수의 끝으로 이동한다. return : 현재 수행중인 함수를 빠져 나온다.

  30. 변수 값 추적 p /[출력형식] [변수명] : 해당 변수 값 p ‘파일명’::[변수명] : 특정 파일의 전역변수 p [함수명]::[변수명]: 특정 함수의 static 변수 info locals : 현재 상태의 지역변수 리스트 출력형식 t : 2진수로 출력 o : 8진수로 출력 d : 부호가 있는 10진수(int)로 출력 u : 부호가 없는 10진수(unsigned int)로 출력 x : 16진수로 출력 c : 최초 1바이트 값을 문자형으로 출력 f : 부동 소수점 값 형식으로 출력

More Related