Development Environment 2 Jo, Heeseung
make
make Definition make is utility to maintain groups of programs Object If some file is modified, make detects it and update files related with modified one It can use to command based programs 3
make basic rules 3 components Target, dependency, command File format File name: Makefile (makefile) Format target: dependency [tab] command 4
make example make 를사용하지않을때 gcc -c main.c gcc -c add.c gcc -c sub.c gcc -o test main.o add.o sub.o 혹은, gcc -o test main.c add.c sub.c 5
make example all: main.o add.o sub.o gcc -o test main.o add.o sub.o main.o: addsub.h main.c gcc -c main.c add.o: add.c gcc -c add.c sub.o: sub.c gcc -c sub.c 반드시 tab 으로입력 6
make example 어느때어떤 target 이다시컴파일될것인가? main.c가바뀌었을경우 add.c 혹은 sub.c가바뀌었을경우 addsub.h가바뀌었을경우 7
label clean: rm *.o test 레이블로사용될때는의존관계부분이없어도가능 실행방법 make clean 8
macro CC=gcc SRC=main.c add.c sub.c main: ${SRC} ${CC} -o test ${SRC} 9
미리정해져있는매크로 make -p 를통하여모든값들을확인가능 ASFLAGS = as 명령어의옵션세팅 - AS = as CFLAGS = gcc 의옵션세팅 - CC = cc (= gcc) CPPFLAGS = g++ 의옵션 - CXX = g++ LDLFAGS = ld 의옵션세팅 - LD = ld LFLAGS = lex 의옵션세팅 - LEX = lex YFLAGS = yacc 의옵션세팅 - YACC = yacc 10
Simple Makefile CFLAGS = -Wall -O -g bin=hello t1=main t2=funcs obj=$(t1).o $(t2).o all: $(bin) $(bin): $(obj) $(CC) $(obj) -o $@ clean: rm -f $(bin) *.o $(bin) 을나타내는내부변수 11
Ex: Makefile 작성 실습목표 앞서코딩한 99단프로그램을 build할수있는 Makefile 을작성 make all, make clean이정상적으로동작하는지확인 12
GNU DeBugger (GDB)
GDB 기본사용법 gcc 컴파일시 -g 옵션추가 (-O 옵션은제거 ) gdb 실행 gdb a.out gdb --args a.out 1 2 3 4 root@iter1:/tmp> gdb a.out GNU gdb (Ubuntu/Linaro 7.4-2012.04-0ubuntu2.1) 7.4-2012.04 Copyright (C) 2012 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". For bug reporting instructions, please see: <http://bugs.launchpad.net/gdb-linaro/>... Reading symbols from /tmp/a.out...done. (gdb) 14
GDB 기본사용법 종료 q / ctrl+d 소스찾아가기 (list) l : main 함수를기점으로소스의내용이출력된다 l 10 : 10 행주변의소스가출력 l func : func 함수의소스를출력 l a.c:func : a.c 파일의 func 함수부분을출력 l a.c:10 : a.c 파일의 10행을기준으로출력 15
GDB 기본사용법 중단점사용하기 (breakpoint) b func : func 함수에브레이크포인트설정 b 10 : 10 행에브레이크포인트설정 b a.c:func : a.c 파일의 func 함수에브레이크포인트설정 b a.c:10 : a.c 파일의 10 행에브레이크포인트설정 b +2 : 현재행에서 2 개행이후지점에브레이크포인트설정 b -2 : 현재행에서 2 개행이전지점에브레이크포인트설정 b *0x8049000 : 0x8049000 주소에브레이크포인트설정 ( 어셈블리로디버깅시사용 ) b 10 if var == 0 : 10 행에브레이크포인트를설정해되, var 변수값이 0 일때작동 16
GDB 기본사용법 중단점삭제하기 (clear, delete) cl func : func 함수의시작부분에브레이크포인트지움 cl 10 : 10행의브레이크포인트지움 cl a.c:func : a.c 파일의 func함수의브레이크포인트지움 cl a.c:10 : a.c 파일의 10행의브레이크포인트지움 cl : 모든브레이크포인트지움 17
GDB 기본사용법 프로그램실행, 종료 (run, kill) r : 프로그램수행 ( 재시작 ) r arg1 arg2 : arg1과 arg2를인자로프로그램수행 k : 프로그램수행종료 역추적하기 (backtrace) bt : 오류가발생한함수를역으로찾아감 18
GDB 기본사용법 변수정보보기 (info, print) info locals : 현재상태에서어떤지역변수들이있으며, 값은어떠한지를알수있음 info variables : 현재상태에서의전역변수리스트를확인 p lval : lval 값을확인 p func : func 함수의주소값을확인 p pt : pt 가구조체라면구조체의주소를확인 p *pt : pt 가구조체라면구조체의값을확인 p **pt : *pt 가구조체라면구조체의값을확인 info registers : 레지스트값전체를한번에확인 19
GDB 기본사용법 디버깅하기 (step, next, continue, until, finish, return, step instruction, next instruction) s : 현재출력된행을수행하고멈추지만, 함수의경우함수의내부로들어가서수행 s 5 : s 를 5 번입력한것과동일 n : 현재행을수행하고멈추지만, 함수의경우함수를수행하고넘어감 n 5 : n 을 5 번입력한것과동일 c : 다음브레이크포인트를만날때까지계속수행 u : for 문에서빠져나와서다음브레이크포인트까지수행 20
Ex: gdb 실습목표 다음프로그램을정상적인결과값이나오도록 debugging 하시오 gcc -g -o a.out a.c # include <stdio.h> int main() { int i, num, j; printf ("Enter the number: "); scanf ("%d", &num ); for (i=1; i<num; i++) j=j*i; } printf("the factorial of %d is %d\n", num, j); 21
Ex: gdb 실습목표 다음프로그램은왜 segment fault 를만드는지설명하시오 gcc -g -o a.out a.c #include <stdio.h> void main() { char *temp = "Paras"; int i; i=0; temp[3]='f'; } for (i =0 ; i < 5 ; i++ ) printf("%c\n", temp[i]); 22
Ex: gdb 실습목표 다음프로그램은왜 segment fault 를만드는지설명하시오 gcc -g -o a.out a.c #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { char *buf; buf = malloc(1<<31); strcpy(buf, "This is Test"); printf("%s\n", buf); } return 1; 23
File transfer using WinSCP
WinSCP http://winscp.net ssh 를이용한파일전송 tool 25
WinSCP 26
Exercise Ex. 앞서제작한구구단프로그램의폴더를모두압축하여 Windows 로전송하자 tar cvfz gugu.tar.gz gugu zip -r gugu.zip gugu WinSCP 를이용하여다운로드 27