티스토리 뷰
gcc 컴파일러
gcc 컴파일러
C 프로그램을 컴파일한다. 옵션이 없으면 실행파일 a.out을 생성한다.
- -c 옵션: 목적 파일 생성
- -o 옵션: 실행 파일 생성
$ gcc [-옵션] 파일
다중 모듈 프로그램
프로그램을 하나의 단일 모듈로 만들면, 코드의 재사용이 힘들고 협업에서 어려움을 겪을 수 있다.
그래서 프로그램이 복잡해지는 경우에는 여러 개의 .c 파일들로 이루어진 다중 모듈 프로그램으로 작성한다.
예시) 기존의 프로그램에서 main 함수와 copy 함수를 분리해 따로 작성한다.
→ main.c, copy.c, copy.h (copy.h는 함수의 프로토타입을 포함한 헤더 파일을 말한다.)
// copy.h 파일 내용
#define MAXLINE 100
void copy(char from[], char to[]);
# 컴파일
$ gcc -c main.c
$ gcc -c copy.c
$ gcc -o main main.o copy.o # 또는 gcc -o main main.c copy.c
make 시스템
매우 거대한 다중 모듈 프로그램에서 헤더, 소스 파일, 목적 파일, 실행 파일의 모든 관계를 기억하고 체계적으로 관리하기 위한 시스템을 make 시스템이라고 한다. make 파일에 실행 파일을 만들기 위해 필요한 파일들, 의존 관계, 만드는 방법 등을 기술하고 시스템은 메이크 파일을 통해 실행 파일을 더 쉽게 만들 수 있다. 다중 모듈 프로그램 중 일부 파일이 변경된 경우, 변경된 파일만 다시 컴파일해 실행 파일을 업데이트할 수 있다.
# 미리 에디터로 메이크파일을 만든 뒤, make 명령어를 통해 시스템에 적용(업데이트)한다.(메이크파일 실행)
$ make # 또는 make [-f] filename
메이크파일의 구성
목표:의존리스트
명령리스트
의 모양으로 구성되어 있다.
// 예시) makefile
main:main.o copy.o
gcc -o main main.o copy.o
main.o:main.c copy.h
gcc -c main.c
copy.o:copy.c copy.h
gcc -c copy.c
main.o와 copy.o로 main 실행 파일을,
main.c와 copy.h로 main.o를,
copy.c와 copy.h로 copy.o를 만든다.
GDB 디버거
리눅스에서 가장 대표적인 디버거이다.(GNU debugger)
주요 기능
- 정지점 설정
- 한 줄씩 실행
- 변수 접근 및 수정
- 함수 탐색
- 추적(tracing)
먼저 디버깅 전에 -g 옵션으로 컴파일을 해야 한다.
$ gcc -g -o longest longest.c
$ gcc -g -o main main.c copy.c
그 후에 실행파일을 디버깅 모드로 실행한다.
$ gdb [실행파일]
gdb의 기능
1. 소스 보기 : l(ist)
- l [줄번호] : 지정된 줄을 프린트한다.
- l [파일명]:[함수명] : 지정된 함수를 프린트한다.
- set listsize n : 출력되는 줄 수를 n 개로 변경한다.
2. 정지점 설정 : b(reak), clear, d(elete)
- b [파일:]함수 : 함수의 시작부분에 정지점을 설정한다.
- b n : n번 줄에 정지점을 설정한다.
- b +n : 현재 줄에서 n개 줄 이후에 정지점을 설정한다.
- b -n : 현재 줄에서 n개 줄 이전에 정지점을 설정한다.
- info b : 현재 설정된 정지점을 출력한다.
- clear 줄번호 : 해당 정지점을 삭제한다.
- d : 모든 정지점을 삭제한다.
3. 프로그램 수행
- r(un) 인수 : 명령줄 인수를 받아 프로그램 수행
- k(ill) : 프로그램 수행 강제 종료
- n(ext) : 멈춘 지점에서 다음 줄만 수행하고 멈춤
- s(tep) : n과 동일. 함수호출 시 함수 내부로 진입
- c(ontinue) : 정지점을 만날 때까지 수행
- u : 반복문을 빠져 나옴
- finish : 현재 수행 중인 함수 끝으로 이동
- return : 현재 수행 중인 함수를 빠져 나옴
- quit : 종료
4. 변수 값 프린트 : p(rint)
- p [변수명] : 해당 변수 값 프린트
- p 파일명::[변수명] : 특정 파일의 전역변수 프린트
- p [함수명]::[변수명] : 특정 함수의 정적 변수 프린트
- info locals : 현재 상태의 지역변수 프린트
'LINUX' 카테고리의 다른 글
[19] 리눅스 - vi 에디터 (0) | 2022.06.27 |
---|---|
[18] 리눅스 - 변수(환경변수, 지역변수, read, declare), 수식(연산자), 조건문, 반복문, 함수, 디버깅, shift (0) | 2022.06.27 |
[17] 리눅스 - Bash 쉘 스크립트 작성 (bash shell, alias, history, 명령 재실행) (0) | 2022.06.27 |
[16] 리눅스 - awk란? (0) | 2022.06.21 |
[15] 리눅스 - 디스크(df, du) 및 tar 아카이브, 압축(gzip, compress), rpm (0) | 2022.06.21 |
- Total
- Today
- Yesterday
- linuxawk
- 버추억박스에러
- GithubAPI
- 백준27211
- linuxtouch
- whatis
- linuxgedit
- OnActivityForResult
- Baekjoon27219
- awk프로그램
- virtualbox
- linux파일
- cron시스템
- 코테
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 리눅스cron
- 백준27219
- 사용자ID
- atq
- 쇼미더코드
- GitHubAPIforJava
- 백준
- Linux
- api문서
- Baekjoon27211
- 버추억박스오류
- 리눅스
- cat
- baekjoon
- E_FAIL
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |