-g 옵션을 넣고 컴파일 한다.
gcc main.c -g -o main
컴파일 최적화 옵션은 사용하지 않는 것이 좋다.
gdb 실행파일명으로 실행한다.
gdb ./main
또는 gdb로 실행중인 프로세스의 식별자인 PID를 load 하는 것도 가능하다.
소스코드 보기
- l : main 심볼부터 소스코드 출력
- l 10: 10행을 기준으로 소스코드 출력
- l - : 이전행의 소스 출력
- l func: 해당 함수의 소스 출력
- l file.c:func: 해당 파일의 해당 함수 부분을 출력
- l file.c:10 : file.c 파일의 line 10을 기준으로 출력
- set listsize 20 : l 명령의 기본 출력 코드 수를 20라인으로 설정
어셈블리 코드 보기
- disas 라인/함수명
분기
- jump 행번호/함수명
엔터를 치면 이전 명령어가 실행되기 때문에 계속 엔터를 쳐서 그 다음행의 소스코드를 출력할 수 있다.
Breakpoint 설정
- b 행번호 : 해당 행에 Breakpoint 설정
- b func : 함수 시작 부분에 Breakpoint 설정
- b *0xFFFF8040 : 해당 주소에 Breakpoint 설정 (어셈블리 디버깅 시 사용)
- d : 모든 Breakpoint 지우기
- cl 행번호/함수명 : 해당 Breakpoint 지우기
- b 10 if var == 0 : 10번 라인에서 var 값이 0일 때 break
- info b : 모든 브레이크 포인트 보기
- disable/enable br : 모든 브레이크 포인트 (비)활성화
- disable/enable br 6 8 : 6, 8 번 브레이크 포인트 (비)활성화
정규표현식을 활용한 Breakpoint 설정
- rb func : func을 포함하는 심볼에 Breakpoint 설정
- rb ^func : func으로 시작하는 심볼에 Breakpoint 설정
- rb TestClass:: 해당 클래스에 해당하는 심볼에 Breakpoint 설정
실행
- r : 프로그램 실행
- r arg1 arg2 : arg1 과 arg2 를 프로그램 인자로 실행
- k : 프로그램 실행 종료
- n : 다음 행으로 이동 (함수 안으로 들어가지 않음)
- s : 다음 행으로 이동 (함수 안으로 이동)
- c : 다음 브레이크 포인트까지 실행
- u : 현재 루프를 빠져나갈 때까지 실행
- finish : 함수 수행 후 빠져나감
- return : 함수 수행 중단 후 빠져나감 return -1 로 옵션 지정 가능
- advance 20: 현재 파일의 행번호 20까지 실행
- advance file.c:10: 해당 파일의 행번호를 만날 때까지 실행
WatchPoint 설정 : 특정 변수의 특정 변수의 값이 바뀔 때 마다 Breakpoint 걸린다.. 이 때, 지역변수에 대한 WatchPoint 설정은 지역변수의 스코프 내에 들어왔을 때 설정하여야 한다.
- watch 변수명 : 변수에 값이 쓰여질 때 마다 브레이크
- rwatch 변수명 : 변수의 값이 읽혀질 때마다 브레이크
- awatch 변수명 : 변수에 값이 쓰이거나 읽혀질 때마다 브레이크
변수 및 레지스터 값 확인
- p 변수명 : 해당 변수의 값 출력
- p/서식지정자 변수명 : 해당 출력 형식으로 변수 값 출력
- p *ptr / p **ptr : 해당 포인터 변수의 주소에 저장되어 있는 값 확인
- p *ptr@4 : ptr이 가르키는 길이가 4인 배열의 값 출력
- p $레지스터명 : 특정 레지스터의 값 확인
- set variable 변수명 = 0 : 중단점에 걸린 상태에서 변수 값을 변경
- display 변수명 : 중단점에 걸릴 때마다 해당 변수의 값 출력
- info display / delete diplay / disable display / enable display
- ptype 변수명 : 해당 변수의 타입 출력
- info locals : 현재 스코프에서 모든 지역변수의 값들을 확인
- info variables : 모든 전역변수의 값 확인
- info registers : 모든 레지스터의 값 확인
- info all-registers : 레지스터 전체 출력 (MMX 포함)
- info args : 함수 호출 시 인자를 출력
- info catch : 함수의 예외 핸들러를 출력
스택 프레임 정보 확인
- bt : 전체 스택 프레임 출력. 콜스택을 확인하여 역추적할 수 있다.
- frame n : 스택 번호의 스택 프레임으로 이동
- info f n : 해당 번호의 스택 프레임 내용 출력
- up 상위 스택 프레임으로 이동
- down 하위 스택 프레임으로 이동
'운영체제 > Linux' 카테고리의 다른 글
Linux ] cat 명령어, > 리다이렉션 (0) | 2022.10.10 |
---|---|
Linux ] gcc -O 최적화 옵션 플래그 (0) | 2022.10.09 |
Linux ] rm 명령어 (0) | 2022.10.09 |
Linux ] 연속으로 명령 실행시키기 ; & && || pipe (0) | 2022.10.09 |
Linux ] mv, rename 명령어 사용법, 파일명 변경, 파일 이동, 확장자 일괄 변경 (0) | 2022.10.09 |