내 잡다한 노트
gcc, Make, gdb 본문
gcc
리눅스 환경에서 컴파일을 실행할 수 있는 툴
컴파일에 필요한 전처리기, 컴파일러, 어셈블러, 링커를 호출
gcc [-옵션] <컴파일 할 파일명>
옵션 내용 사용법
-o 출력할 파일명을 지정 gcc -o (출력파일) (컴파일 할 파일들)
-c 링크를 하지 않음 gcc - c (컴파일 할 파일)
오브젝트 파일을 출력
Make
Make를 쓰는 이유
- 각 파일에 대한 반복적 명령의 자동화로 인한 효율성 증가
- 프로그램의 종속 구조를 빠르게 파악할 수 있으며 관리가 용이하다.
- 많은 c소스들중에 하나를 수정해도 make를 하면 전체 재 컴파일을 할 수 있다.
vi Makefile 로 파일을 만든다.
make 구성
- 목적파일(Target) : 명령어가 수행되어 나온 결과를 저장할 파일 (목적 or 실행파일)
- 의존성(Dependency) : 목적파일을 만들기 위해 필요한 재료
- 명령어 (Command) : 실행 되어야 할 명령어들, 반드시 tab 들여쓰기 후 작성해야함.
- 매크로 (macro) : 코드를 단순화 시키기 위한 방법
타겟절 : 의존성
실행할 커맨드
형식으로 작성한다.
매크로를 이용하면 편하다 매크로란 Makefile에서 편리하게 사용하기 위해 미리 정의된 변수.
$( ... )를 권장
make 명령 내부에 정의된 매크로
$^ : 현재 타겟의 종속 항목 리스트
$* : 현재 타겟 이름 (확장자 제외)
.SUFFIXES : .c .o
파일의 확장자를 보고 그에 따라 적절한 연산을 수행시키기 위한 규칙
gdb
디버깅 도구.
디버깅을 보다 쉽게 하고 싶다면 gcc 컴파일 시 -g 옵션을 사용
- 사용법
gdb [프로그램] : 프로그램을 디버깅
q 또는 quit : gdb 종료
gdb가 symbol table을 찾지 못할땐 file 프로그램이름 을 통해 연결해줘야 한다.
- file 명령을 사용하여 디버그하려는 프로그램을 지정하십시오. 예를 들어 프로그램 이름이 my_program인 경우 file my_program 명령을 실행할 수 있습니다.
- 프로그램이 디버깅 기호로 컴파일된 경우 GDB는 자동으로 기호 테이블을 로드하고 "Reading symbols from my_program...done"과 같은 메시지를 인쇄해야 합니다.
그리고 꼭 컴파일할때 -g를 포함하게끔 해야함.
gcc -g your_program.c -o your_program
- 명령어
run : 디버깅 할 프로그램의 수행 시작
줄여서 r로 쓴다
set [variable = value] : 변수 값 설정
continue : breakpoint 등으로 멈춰진 프로그램 수행
줄여서 c 로 쓴다.
kill : 디버깅 중인 프로그램 강제 종료
줄여서 k로 쓴다
next [n] : 멈춰진 프로그램에서 다음 n개의 문장을 수행한 후 멈춤
줄여서 n으로 쓴다
step [n] : next와 동일하나 함수가 있을 경우 함수 내부로 들어가서 수행
print [variable] : 변수의 값, 함수의 리턴 값 확인
줄여서 p로 쓴다.
Break [line-number] : 특정 위치인 line-number에 오면 프로그램 정지
b func : func 함수의 시작부분에 브레이크 포인트 설정
b 10 : 10행에 브레이크 포인트 설정
info b : 현재 브레이크 포인트 보기
d : 모든 브레이크 포인트 지우기
list : 소스보기
Delete [N] : N번 breakpoint 제거
watch [변수명] : 특정변수에 와치 포인트를 설정하고, 특정변수가 바뀔 때마다 브레이크가
걸리면서 이전/현재 값을 출력한다.
'DevOps > 리눅스' 카테고리의 다른 글
리눅스 보안 방화벽에 관해 (1) | 2023.09.02 |
---|---|
fork( ) 정의와 특징 (0) | 2023.04.08 |
vi 복사 명령어 (0) | 2023.04.05 |
특정 문자 및 문자열을 vi에서 찾기 명령어 (0) | 2023.03.29 |
리눅스 명령어 정리 (0) | 2023.03.17 |