'gravity-free/gdb'에 해당되는 글 3건

  1. 2012.07.02 gdb-3
  2. 2011.03.23 gdb-2
  3. 2011.03.22 gdb-1

gdb-3

gravity-free/gdb 2012. 7. 2. 11:21

'gravity-free > gdb' 카테고리의 다른 글

gdb-2  (0) 2011.03.23
gdb-1  (0) 2011.03.22
:

gdb-2

gravity-free/gdb 2011. 3. 23. 11:31

- gdb 실행

$ gdb 프로그램명
or
$ gdb 프로그램명 실행중인프로세스ID



- gdb 종료

(gdb) q
or
(gdb) [Ctrl]+d



- 소스 출력

main 함수를 기점으로 소스 내용 출력
(gdb) l
or
(gdb) list

이전 행을 출력
(gdb) l-

5행의 소스를 출력
(gdb) l 5

함수의 소스를 출력
(gdb) l 함수명

특정 소스파일의 몇번째 행을 기준으로 출력
(gdb) l 소스파일명:53

특정 소스파일의 특정 함수를 기준으로 출력
(gdb) l 소스파일명:함수명

한 번에 표시되는 라인 수 설정
set listsize 라인수



- 프로그램 실행

(gdb) r

- 브레이크 포인트
특정 함수에 설정
(gdb) b 함수명

특정 행에 설정
(gdb) b 라인수

현재 행에서 몇번째 이후 라인에 설정
(gdb) b +라인수

현재 행에서 몇번째 이전 라인에 설정
(gdb) b -라인수

특정 파일의 특정 함수에 설정
(gdb) b 파일명:함수명

특정 파일의 특정 라인에 설정
(gdb) b 파일명:라인수

특정 주소에 설정
(gdb) b *0x12345678       (주소)

조건으로 브레이크 설정
if
(gdb) b 98 if 변수명 조건
예) (gdb) b 98 if nCnt == 0

condition
(gdb) condition 행번호 변수명 조건
예) (gdb) condition 32 lineCnt == 10

1회만 브레이크
(gdb) cl 함수명
(gdb) cl 행번호
(gdb) cl 파일명:함수명
(gdb) cl 파일명:행번호

모든 브레이크 삭제
(gdb) d

브레이크 포인트 정보 보기
(gdb) info b
or
(gdb) info breakpoints

브레이크 포인트 온/오프
비활성화
(gdb) disable 포인트번호(info b에서의 번호)

활성화
(gdb) enable 포인트번호



- 프로그램 실행

실행
(gdb) r

인자 지정하여 실행
(gdb) r 인자1 인자2....



- 진행 명령어


스택 백트레이스(콜 스택)
(gdb) bt

step (함수 호출 내부까지 들어감)
(gdb) s

step을 반복
(gdb) s 반복횟수

현재 행 수행 후 정지,
(gdb) n

n을 반복
(gdb) n 반복횟수

다음 브레이크 포인트까지 쭉~ 진행
(gdb) c

현재 진행중인 함수가 끝난 시점으로 진행
(gdb) finish

함수 진행중 빠져나오기
(gdb) return 리턴값

현재 루프를 빠져나가기
(gdb) u

인스트럭션 단위로 수행(함수 내부까지)
(gdb) si

인스트럭션 단위로 수행
(gdb) ni



- 변수 값 보기

와치
(gdb) watch 변수명

지역변수들
(gdb) info locals

전역변수들
(gdb) info variables

변수 개별로 보기
(gdb) p 변수명

함수의 주소 값 보기
(gdb) p 함수명

포인트 변수 보기
(gdb) p *변수명         (c에서 포인터의 값 참조와 유사.. 이중 포인터는 p **변수명...)

레지스트 값 보기
(gdb) p $레지스트리명

레지스트 값 전체 보기
(gdb) info all-registers

구조체 배열 보기
(gdb) p *구조체명@배열수

특정 함수의 static 변수 값 보기
(gdb) p 함수명::변수명

전역 변수 값 보기
(gdb) p 파일명::변수명

출력 형식 지정
16진수
(gdb) p /x 변수명

2진수
(gdb) p /t 변수명

8진수
(gdb) p /o 변수명

부호 있는 10진수
(gdb) p /d

부호 없는 10진수
(gdb) p /u

최초 1바이트를 문자열로
(gdb) p /c 변수명

부동 소수점 값
(gdb) p /f 변수명

가장 가까운 심볼의 오프셋
(gdb) p /a 변수명


 
- 프로그램 종료

(gdb) k

출처 : http://busang.egloos.com/117416

'gravity-free > gdb' 카테고리의 다른 글

gdb-3  (0) 2012.07.02
gdb-1  (0) 2011.03.22
:

gdb-1

gravity-free/gdb 2011. 3. 22. 21:32

gdb(1)                      GNU Tools                      gdb(1)


이름
       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는 네가지 종류의 일(더 많은 일을
       할 수 있다)을 할 수 있다:


          �   프로그램의 행동에 영향을 줄 수 있는 각종 조건을 설정한 후,
              프로그램을 시작한다.


          �   특정 조건을 만나면 프로그램을 정지시킨다.


          �   프로그램이 정지됐을 때 무슨 일이 일어났는지 검사한다.


          �   프로그램 내부 설정을 바꾸어서 버그를 수정함으로써 다른
              버그를 계속 찾아나간다.


       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 명령들이다:

       list : source file 10줄을 화면에 표시해주며 enter를 누르면 다음을 계속 보여준다.

       run(r) : 프로그램을 실행하는데 break point가 있다면 그 지점에서 멈춘다.

       break(b) : 프로그램 실행을 일시 중단하는 위치를 지정한다.

       clear : 특정 라인이나 함수에 있던 break point를 삭제

       delete : 몇몇 정지점이나 자동으로 출력되는 표현을 삭제

       next(n) : 다음 행을 수행. sub routine이 있다면 이를 호출해서 계속 수행한다.
                 하지만 subroutine으로 들어가지는 않는다. 호출이 없다면 next와 같음.
                 next n은 n번 수행하라는 의미
                 (그 행에서 호출되는 함수를 수행하지않고 건너뛴다)

       step(s) : 한 줄씩 실행함. sub routine이 있다면 내부로 들어가서 한 줄씩 실행함
                 (그 행에서 호출되는 함수를 수행)

       up : 현재 함수를 호출한 함수를 표시한다.

       down : 현재 함수가 호출하는 함수를 표시한다.

       print expr : expr 내용을 화면에 표시한다.

       display : 현재 display된 명령의 목록을 보여준다.

       bt : backtrace의 약자로 프로그램의 스택을 보여줌

       kill : 디버깅 중인 프로그램 실행을 취소

       file programName : programName 파일을 디버깅할 프로그램으로 사용한다.

       cont : continue의 약자로 현재 위치에서 프로그램을 계속 실행한다.

       help : 명령에 대한 정보를 보여주거나 일반적인 정보를 보여준다.

       finish : 선택된 스택 프레임이 리턴될 때까지 수행함. 리턴되는 값은 출력되고 히스토리에 입력됨

       info : 특정 명령에 대한 정보를 표시한다. 예를 들어 만들어놓은 break point를 보기를 원한다면
              info b 혹은 info break 라고 치면 됨
      
       print expr : 수식의 값을 보여준다.

       c      (정지점등에서 정지한) 프로그램을 계속 수행한다.

       next   (정지한 후) 다음 행을 수행한다; 그 행에서 호출되는
              함수를 수행하지않고 건너뛴다.

       step   (정지한 후) 다음 행을 수행한다; 그 행에서 호출되는
              함수를 수행한다.

       help [name]
              GDB 명령어 name에 대한 정보를 보여거나 GDB 사용에 관한
              일반적인 정보를 보여준다.

       quit   GDB에서 빠져나간다.

       GDB에 대한 상세한 정보를 알고싶으면 Richard M. Stallman과
       Roland H. Pesch가 쓴 Using GDB: A Guide to the GNU
       Source-Level  Debugger를 보라.  동일한 내용이 info의
       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를 표준입력과 표준출력으로 하여 프로그램을
              실행한다.



'gravity-free > gdb' 카테고리의 다른 글

gdb-3  (0) 2012.07.02
gdb-2  (0) 2011.03.23
: