System Programming Lab Week 1: Basic Skills for Practice
Contents vi Editor 사용법 GCC 컴파일러사용법 Makefile 사용법 GDB 사용법
VI Editor Usage vi 모드 입력모드 : 실제문서를편집하는모드. 명령모드 : 키입력이바로명령이되는모드로서쓴내용을삭제하거나, 복사할때사용. ex 명령모드 ( 콜론모드 ) : 문서의저장, 종료등의명령모드. vi 시작과종료 시작 vi file vi 를시작하여지정한파일편집 vi -R file, view file 읽기전용 (read-only) 편집기로서 vi 를시작하여지정 한파일편집 종료 :wq 데이터를저장하고종료 :q! 데이터를저장하지않고종료
VI Editor Usage vi 기본명령어 [1] 삽입 i 입력모드로전환, 커서위치앞에서삽입 I 입력모드로전환, 현재줄의앞에삽입 a 입력모드로전환, 커서위치뒤에서삽입 A 입력모드로전환, 현재줄의끝에삽입 o 입력모드로전환, 현재줄의아래에전개 O 입력모드로전환, 현재줄의위에전개 문자삭제 x 커서가있는문자삭제 X 커서의왼쪽문자삭제 dd 현재줄의전체삭제 D 커서부터줄의끝까지삭제
VI Editor Usage vi 기본명령어 [2] 데이터저장하기 :w 원래의파일로데이터를저장 :w>>file 지정한파일에데이터를추가 :w file 지정한파일로데이터를저장 검색 / 이전의패턴에대해앞으로검색을반복 n 명령에대해같은방향으로반복
VI Editor Usage vi 기본명령어 패턴에의한치환 :s/pattern/replace/ 현재줄의치환 :[line]s/pattern/replace/ / l / 지정한줄의치환 :[line],[line]s/pattern/replace/ :%s/pattern/replace/ 지정한범위의치환 모든줄의치환 고치기의취소또는반복 U U 편집버퍼를수정했던마지막명령어취소 현재줄을저장. 편집버퍼를수정했던마지막명령어반복
GCC Compiler Usage GCC object file 생성 gcc c file.c executable file 생성 gcc o target_file object_file1 object_file2
Makefile Example 8
Gdb Usage Gdb(GNU Debugger) 란? 어떤프로그램이수행되는도중그프로그램내에서어떤일이일어나는지를볼수있게해준다 Gdb 기능 프로그램을수행시킨다 어떤특별한조건에서프로그램의수행을 stop시킨다 프로그램이 stop 된상태에서그프로그램의내부를볼수있다 프로그램의일부분을수정한다 Stop된프로그램을 continue시킨다 9
Gdb Starting & Termination 디버깅하기위한컴파일옵션 $ gcc g prog.c Gdb 시작 - Gdb prompt "(gdb)" 가나옴 $ gdb process 특정프로그램을디버깅 $ gdb process_core 특정프로그램및 core 파일을디버깅 $ gdb process_pid 현재수행중인프로그램 ( 프로세스번호 ) 를디버깅 $ gdb --args proc_arg1 proc_arg2... 인수를사용하는프로그램을디버깅 Gdb 종료 quit 혹은 q 혹은 ^D 10
Gdb Running Target Program 프로그램 run run 혹은 r 인수를사용하는프로그램 run run arg1 arg2 이미수행중인프로세스디버깅시작및종료 attach pid detach 11
Gdb Breakpoint Setting Breakpoint 란? 프로그램의수행을정지시키는지점 특정함수에 breakpoint 설정 break function 혹은 break filename:function 프로그램소스줄에 breakpoint 설정 break linenum 혹은 break filename:linenum 현재위치에서상대적위치에 breakpoint 설정 break +offset 혹은 break -offset 조건 breakpoint 설정 break... if cond breakpoint 설정지점보기 info breakpoints 12
Gdb Watchpoint Setting Watchpoint 란? 특정식의값이변경되거나읽혀질때프로그램의수행이 stop하는특별한 breakpoint 프로그램에의하여특정변수가쓰여지면 (write) breakpoint 형성 watch 변수 프로그램에의하여특정변수가읽혀지면 (read) breakpoint 형성 rwatch 변수 특정변수가써지거나 (write) 혹은읽혀지면 (read) breakpoint 형성 awatch 변수 설정된 watchpoint 보기 info watchpoints 13
Gdb - continue, step, until, finish stop 된프로그램의수행 continue [ignore-count] c [ignore-count] stop 된프로그램의한단계혹은 n 단계수행 step step n 프로그램의특정지점까지수행하고 stop until location u location 현재수행중인함수의수행을끝내고 stop finish
Gdb Stack Tracing 스택전체보기 backtrace 혹은 bt backtrace n 혹은 bt n 스택프레임의선택 up n // 오래된프레임방향으로 down n // 최근프레임방향으로 현재선택된프레임정보보기 info frame info f
Gdb Source File Handling 소스라인프린트 list linenum list function list list 소스파일편집 edit number edit filename:number edit function edit filename:function
Gdb Data Verification 변수값보기 print 변수 print /f expr //f 는 format( 예 : /d /o /x) info locals // 지역변수들정보출력 info variables // 전역변수들정보출력 메모리값보기 x addr x /nfu addr // n 은갯수, f 는 format, u 는단위 ( 예 : b, h. w) register 값보기 info registers // register 이름보기 (floating-point 제외 ) info all-registers // register 이름보기 print $register
Gdb Symbol Table Verification 심볼주소보기 info address symbol 주소에있는심볼이름보기 info symbol address expression 의 type 보기 ptype pyp expr 어떤함수내의모든심볼이름보기 info scope function
Gdb Program Modification 변수값수정 print x=4 다른곳으로 jump jump linespec jump *address 프로그램에 signal 보내기 signal signal 함수부르기 call expr 함수에서 return return expr