23.11.15 최초 작성
gcc [옵션] [결과 파일] [소스 파일1] [소스 파일2]...
--help : 간단한 옵션을 출력
--version 또는 -v : gcc의 버젼을 출력
-o : 출력 파일명을 지정
-c : 링킹 과정을 진행 하지 않고 .o 파일인 오브젝트 파일까지만 생성
-S : 어셈블러까지 진행 하지 않고, 컴파일러까지의 출력인 .S 어셈블러 파일을 생성
-E : 컴파일러까지 진행 하지 않고, 전처리까지의 출력인 .i 파일을 생성
-O1 ~ -O3 : 최적화 수준을 지정. 숫자가 클수록 높은 수준의 최적화.
-g : 디버깅을 위한 정보를 컴파일 하면서 생성
-D : define 을 할수 있는 옵션
-l : 라이브러리 이름을 지정
-L : 추가 라이브러리 디렉토리를 지정
-W : 모든 에러 메시지 출력
-w : 모든 에러 메시지를 출력 하지 않음
-I : 추가 헤더 파일이 있는 디렉토리를 지정
gdb <프로그램> //파일명(.o)인 파일 디버깅 시작
gdb -p <pid> //pid 기준 디버깅 시작
...
run [인자] //gdb 실행 (인자 있을 경우 인자 정보를 가지고 시작)
kill //디버깅 중인 프로그램 중지
q //gdb 종료
step & next & jumpstep(s) [숫자] //숫자 만큼 라인 수행 (함수 수행 시 함수 안으로 진입)
next(n) [숫자] //숫자 만큼 라인 수행 (함수 수행 시 다음라인 진행)
stepi //step 어셈블리어 단위 수행
nexti //next 어셈블리어 단위 수행
u //현재 루프 탈출
jump *[값] //값으로 강제적 분기 (주소, 행번호, 함수명 가능)
breakpointbreak / b [값] //실행 중 해당 지점에서 멈춤 (주소, 행번호, 함수명 가능)
break info //현재 breakpoint 정보 출력
clear //breakpoint 삭제
delete //모든 breakpoint 삭제
continue //다음 브레이크 포인트까지 수행
finish //현재 함수가 결과를 반환할 때 까지 수행
watchpointwatch <변수> //변수가 변경될 때 마다 break 실행되며 값을 보여 줌
display <변수 이름> //실행 중 변수값 지속적으로 출력
print(p) <값> //변수 & 레지스터 & 포인터 값 출력
<값>
(변수 이름)
($레지스터 이름)
(*포인터 이름)
p'[파일명]'::[변수명] //특정 파일의 전역변수 출력
p[함수명]::[변수명] //특정 함수의 static 변수명 출력
x/[n][출력형식][범위 단위][값] //메모리 값 출력
[n] : 출력 줄 수 지정
[출력형식]
x : 16진법 표기
o : 8진법 표기
u : 10진법 표기 (부호 없음)
t : 2진법 표기
[범위 단위] (기본 4 byte)
b : 1 byte 단위 표기(byte)
h : 2 byte 단위 표기(half word)
w: 4 byte 단위 표기(word)
g : 8 byte 단위 표기(giant)
[값] : 메모리 주소 / 함수 명
info f //스택 프레임 내용 출력
info args //함수 호출 시 인자 출력
info catch //함수의 exception handler 출력
info threads //스레드 리스트 출력
bt //전체 스택 프레임 출력
up //상위 스택 프레임 이동
down //하위 스택 프레임 이동
backtrace //함수 콜 스택 출력
set follow-fork-mode-[child/parent] //설정 시 fork()이후 child 프로세스 디버깅
//기본값 parent
show follow-fork-mode //fork()에 대한 현재 디버거 응답 상태를 나타냄
set detach-on-fork [on|off] //fork()이후 프로세스 하나를 detach할건지(on) parent / child 둘다 제어할 것인지 설정 (off, 하나는 중지상태)
show detach-on-fork
elf 파일의 내용을 보여주는 프로그램readelf -f <파일명> //파일 해더 조회
-l //프로그램 해더 조회
-S //섹션 해더 조회
-e //전체 해더 조회
-s //심볼 테이블 조회
-r //재배치 정보 조회
-d //동적 세그먼트 조회
-a //elf의 모든 정보 조회
objdump [옵션] <파일명>
-t //심볼테이블 확인
-S //어셈블리어로 디스어셈블한 소스 전체 출력
-h //섹션 헤더 확인
-s //구역별로 나눠서 내용을 출력
-D //전부 디버깅
-d //디스 어셈블
strace [옵션] <파일명 (binary형식)>
-e <시스템콜> //조회 대상의 시스템 콜을 한정해서 출력
-e trace=<시스템콜1,시스템콜2..> //시스템 콜 여러개를 한정해서 출력
-o <파일명> //결과를 파일에 저장
-p <PID> //특정 프로세스의 시스템 콜 추적
-t //라인 별 시간정보 함께 출력
-c //조회하는 시스템 콜 통계 정보 출력