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

Slides:



Advertisements
Similar presentations
Linux1 Linux 개요 Linux 방문하여 홈페이지 등록하기 Vi 편집해 보기. Linux2 개요  Linux 란 ? 1991 Linus Benedict Torvalds 가 만든 Unix 의 한 버전 GNU(GNU is Not Unix) » 프로그램이나 정보의.
Advertisements

시스템 프로그래밍 박진희 컴퓨터 시스템 연구실. 2 Project 3 Key-value store 유일한 Key 에 하나의 Value 를 가지고 있는 방식 - Key 와 Value 를 쌍으로 관리 - Hash table, B-Tree, B+ Tree 등 분산형 데이터베이스에서.
KAIST 09 SPARCS 10 안재만 (Kuss).  OS  Kernel & Shell  OS Layer  Linux  Linux / GNU  Linux 역사  Linux 배포판  Linux Directories.
환 영 신입생 도서관 이용 교육 동강대학교 도서관.
서울시 ‘찾아가는 동 주민센터’ 사업 시행 이후 지역사회의 변화
(금) 김 희 준 Makefile (금) 김 희 준
Linux/UNIX Programming
Shellcode 작성 김영성.
시작부터 끝까지 진지한 궁서체로 진행하는 완벽한 주입식의 하드코어한 리눅스/장난감 세미나
C 언어 기초 2 위덕대학교 에너지전기공학부 이 수 형 2009년 2학기.
제3장 C 프로그래밍 환경.
고급 시스템 프로그래밍 제1장 소개 창병모 숙명여대 컴퓨터과학과.
05. gcc, make, gdb.
6 레이스 컨디션.
Host 컴퓨터 개발환경 이해 Lecture #3 (리눅스 관하여…).
리눅스 실습 정성훈.
컴퓨터 네트워크 실습.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
개발 환경 개발 환경 개요 PXA270과 타겟 시스템 툴체인 환경 구축 JTAG 유틸리티 미니컴 Make 유틸리티
크로스 컴파일 환경 구축.
Makefile의 이해 ㈜FALinux 박진호.
제4장 Cross Compiler 설치.
누구나 쉽게 즐기는 C언어 콘서트 한남대학교 컴퓨터공학과 이 재 광 교수.
FUSING.
임베디드 프로그래밍 Lecture #
디바이스 드라이버.
공학기초설계 Youn-Hee Han 강의 소개 & MinGW & gcc 공학기초설계 Youn-Hee Han
1 유닉스 시스템 프로그래밍 개요.
제9장 C 프로그래밍 환경 창병모
[beginning] Linux & vi editor
작 성 자: 김선영 메 일: sunyzero (at) gmail (dot) com 버 전: 1.30
목차 커널의 개념 및 기능 커널 포팅 램디스크.
MicroC/OS-II Lab. 경희대학교 컴퓨터공학과 조 진 성.
Linux/UNIX Programming
컴퓨터 네트워크 실습.
임베디드 시스템 개론 3주차 Embedded System..
Embedded System Porting (2)
Linux Compile.
운영체제 허상복 컴퓨터시스템 연구실
Internet Protocol and Programming
Operating System 5주차 - System Call Analysis -
Beginning Linux Programming
1장. 프로그래밍 언어, C 프로그래밍.
Geek-OS Project 정영진
커널 모듈 프로그래밍 (Kernel Module Programming)
HBE-SMIII-SV210 리눅스 커널과 디바이스 드라이버
실시간 자원 량 정보 제공을 결합한 Heartbeat
1주차: 프로그래밍언어란 무엇인가? C 언어란? C 프로그래밍을 위한 준비
Linux/UNIX Programming
Mips cross compile OS LAB.
문자 디바이스 드라이버 임베디드 시스템.
Linux/UNIX Programming
Kernel Programming Environment
Internet Protocol and Programming
작은 분야의 일을 훌륭하게 해내는 자그마한 도구들을 개발자들에게 제공하고 개발자들은 이 도구들을 창의적으로 결합하여 사용하자.
운영체제 RaspberryPi Sejin Oh.
Lecture Notes on Computer Networks 주 홍 택 컴퓨터공학과 계명대학교
editing program files with vi 기본적인 Linux commands
제9장 C 프로그래밍 환경 TOPCIT (Test of Practical Competency in IT)
Linux/UNIX Programming
시스템 인터페이스 Lab2 X-window 및 명령어 사용.
쉽게 풀어쓴 C언어 Express 제2장 프로그램 개발 과정 C Express.
Telnet 을 활용한 Linux 메뉴얼 오두환.
C언어 개론.
GDB - GNU Debugger 김진용.
HW #2 (1/2) UNIX 파일과 디렉토리 1. 자신의 HOME 디렉토리 아래에 다음과 같은 구조의 디렉토리 및 파일을 생성하고, 이 구조를 다음과 같은 명령을 사용하여 파일로 저장한 후 메일로 제출할 것 $ ls –lR unix > hw2-1 $HOME unix.
Internet Protocol and Programming
Makefile
Eclipse를 이용한 Embedded Linux 응용 프로그램 개발
이성준 Library 만들기 이성준
Presentation transcript:

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

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

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

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

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

gcc 옵션 -S 어셈블리 파일로 컴파일, filename.s 파일 생성 -c 어셈블러(as)로 어셈블까지만 수행, 링크는 수행하지 않는다. filename.o 파일 생성 -w 모든 경고메시지 제거 -W -Wall -Wall 은 모든 모호한 문법에 대한 경고 메시지 출력, -W 합법적이지만 모호한 코딩에 대한 부가적인 정보제공 -O[최적화레벨] 최적화 레벨 : 0, 1, 2, 3, s -g gdb에게 제공하는 정보를 바이너리에 삽입한다. gdb로 디버깅 시에 소스를 보면서 디버깅이 가능해진다. -L, -l -L[라이브러리 디렉토리] : 라이브러리를 찾을 디렉토리 지정, -l[라이브러리 이름] : 링크할 라이브러리 지정 -o 실행 파일 이름 지정

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

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 실행파일 생성

$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

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

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

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

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

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 => 생략가능

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.c palindrome.h reverse.o: reverse.c reverse.h palindrome.o: palindrome.c palindrome.h reverse.h

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

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

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

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

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

$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 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 main2.o reverse.o

11.5 유닉스 파일 보관 시스템 : AR 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

11.5 유닉스 파일 보관 시스템 : AR Archive 순서 정하기 ranlib 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

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

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

11.9 유닉스 디버거 : gdb 디버그를 위한 프로그램 준비 실행방법 종료방법 : Ctrl + d : 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 : 모든 브레이크 포인트 삭제

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

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