이름
gdb - GNU 디버거
개요
gdb [-help] [-nx] [-q] [-batch] [-cd=dir] [-f] [-b bps] [-tty=dev] [-s symfile] [-e prog] [-se prog]
[-c core] [-x cmds] [-d dir] [prog[core|procID]]
설명
GDB같은 디버거의 목적은 다른 프로그램 수행중에 그 프로그램 ``내부에서'' 무슨 일이 일어나고 있는지 보여주거나
프로그램이 고장났을 때 무슨 일이 일어나고 있는지 보여주는 것이다.
GDB는C, C++, Modula-2로 짠 프로그램을 디버그 할 수 있다.
버그를 잡는 걸 돕기위해 GDB는 네가지 종류의 일(더 많은 일을 할 수 있다)을 할 수 있다:
프로그램의 행동에 영향을 줄 수 있는 각종 조건을 설정한 후, 프로그램을 시작한다.
특정 조건을 만나면 프로그램을 정지시킨다.
프로그램이 정지됐을 때 무슨 일이 일어났는지 검사한다.
프로그램 내부 설정을 바꾸어서 버그를 수정함으로써 다른 버그를 계속 찾아나간다.
GDB로 C, C++, Modula-2로 짠 프로그램을 디버그할 수 있다. GNU 포트란이 완성되면 포트란도 지원할 것이다.
쉘 명령어 gdb로 GDB를 기동한다. 일단 시작되면, GDB 명령 quit으로 종료명령을 주기전까지는 터미날로부터
명령을 읽어들인다. help 명령을 사용하여 gdb 내부에서 온라인 도움말을 볼 수 있다.
인자나 옵션 없이 gdb를 기동할 수 있다; 하지만 가장 일반적인 GDB 기동방법은 하나 또는 두개의 실행가능 프로그램명을
인자로 주는 것이다:
gdb program
실행가능 프로그램명과 core 파일을 동시에 인자로 주어 기동할 수도 있다:
gdb program core
실행중인 프로세스를 디버그할려면 대신 프로세스 ID를 두번째 인자로 주면된다:
gdb program 1234
위의 명령은 GDB를 (`1234'란 이름의 파일이 없다면) 프로세스 1234에 접속시킨다(GDB는 core 파일을 먼저 찾는다).
다음은 가장 많이 사용되는 GDB 명령들이다:
break [file:]function : (file안의) function에 정지점을 설정한다.
run [arglist] : (지정되었다면, arglist를 가지고) 프로그램을 시작한다.
bt : 역추적(backtrace):프로그램 스택을 보여준다.
print expr : 수식의 값을 보여준다.
c : (정지점등에서 정지한) 프로그램을 계속 수행한다.
next : (정지한 후) 다음 행을 수행한다; 그 행에서 호출되는 함수를 수행하지않고 건너뛴다.
step : (정지한 후) 다음 행을 수행한다; 그 행에서 호출되는 함수를 수행한다.
help [name] : GDB 명령어 name에 대한 정보를 보여거나 GDB 사용에 관한 일반적인 정보를 보여준다.
quit : GDB에서 빠져나간다.
옵션
옵션 이외의 모든 인자는 실행가능 파일과 core 파일(또는 프로세스 ID)로 인식된다.
즉 옵션 플래그 없는 첫번째 인자는 `-se' 옵션과 같고, 두번째 인자는, 존재한다면,
`-c' 옵션과 같다(인자가 파일이름인 경우). 많은 옵션에 짧은 형식과 긴 형식이 있는데,
둘다 아래에 설명된다. 긴 옵션은 일부만 써도 애매하지 않으면 인식된다.
(당신이 그렇게 하고 싶다면, `-'대신 `+'로 옵션을 나타낼 수도 있다. 우린 일반적 관례인 -를 쓰겠다)
모든 옵션과 명령행 인자들은 순차적으로 처리된다. `-x'옵션을 사용할 경우 순서가 다르면 결과도 다르다.
-help, -h : 모든 옵션을 짧은 설명과 함께 보여준다.
-symbols=file, -s file : file로부터 심볼 테이블을 읽어들인다.
-exec=file, -e file : 적당하다면 실행파일로 file을 사용하여 core dump의 내용을 검사한다.
-se=file : file로부터 심볼 테이블을 읽어들이고 또한 실행파일로 사용한다.
-core=file, -c file : file을 검사할 core dump로 사용한다.
-command=file, -x file : file안의 GDB 명령을 수행한다.
-directory=directory, -d directory : 소스 파일 검색 경로에 directory를 추가한다.
-nx, -n : 초기화 파일 `.gdbinit'의 명령을 수행하지않는다.
보통 모든 옵션과 인자가 처리된 후 초기화 파일의 명령이 실행된다.
-quiet, -q : 도입 메시지와 저작권 메시지를 출력하지않는다. 배치 모드에서도 이들 메시지는 출력되지않는다.
-batch : 배치 모드로 수행한다. `-x' 옵션으로 지정한 파일(.gdbinit' 파일)의 명령들을 수행한 후 종료상태 0으로 종료한다.
파일의 GDB 명령을 수행하던 중 오류가 발생하면 0이 아닌 종료상태로 종료한다.
프로그램을 내려받아서 다른 컴퓨터에서 실행하는 경우등에, GDB를 필터로 사용할 수 있는데
이때 배치 모드가 유용하다.
이 모드가 더 쓸모있도록, GDB하에서 수행되던 프로그램이 종료되면 나오는 Program exited normally.
이란 메시지가 배치 모드에서는 나오지 않는다.
-cd=directory : 현재 디렉토리 대신 directory를 작업 디렉토리로 하여 GDB를 수행한다.
-fullname, -f : 이맥스의 서브프로세스로 GDB가 수행될 때 이 옵션이 켜진다.
이 옵션이 켜지면 GDB는 전체 파일이름과 행번호를, 스택 프레임을 디스플레이할 때마다
(프로그램이 정지되는 경우도 여기에 해당된다) 표준적이고 알아볼 수 있는 양식으로 출력한다.
이 양식은 ` 32'뒤에 파일이름, 콜론으로 구분된 행번호와 문자위치, 개행문자가 오는 것이다.
이맥스-GDB 접속프로그램은 ` 32'를 프레임의 소스코드를 디스플레이하란 신호로 사용한다.
-b bps : 원격 디버깅에 사용되는 직렬 인터페이스의 회선속도(보오율이나 초당 비트수)를 설정한다.
-tty=device : device를 표준입력과 표준출력으로 하여 프로그램을 실행한다
'Programming > C & C++' 카테고리의 다른 글
The Joel Test: 나은 코딩을 위한 12단계 (0) | 2017.10.22 |
---|---|
GCC의 컴파일 옵션에 관해서... (0) | 2017.10.22 |
C 에서의 printf와 C++의 cout의 차이점? (0) | 2017.10.22 |
GDB 사용하기 (0) | 2017.10.22 |
컴파일러 선택하기 (0) | 2017.10.22 |