2. Programming with Debugger 22
UNIX/LINUXUNIX/LINUX 디버거의 종류디버거의 종류
GDBGDB 와와 EmacsEmacs
EmacsEmacs 에서 소스코드 편집하기에서 소스코드 편집하기
EmacsEmacs 에서 컴파일 및에서 컴파일 및 gdbgdb 실행하기실행하기
GDBGDB 사용하기사용하기
기본적인기본적인 ,, 쓸만한 명령어들쓸만한 명령어들
자식프로세스 디버깅 하기자식프로세스 디버깅 하기
스레드 디버깅 하기스레드 디버깅 하기
참고자료참고자료
3. Programming with Debugger 33
GDBGDB
gdbgdb 는 아주 강력하며는 아주 강력하며 ,, 자유롭게 구할 수도자유롭게 구할 수도
있으며있으며 ,, 다양한다양한 UNIXUNIX 플랫폼에서 돌아간다플랫폼에서 돌아간다 ..
gdbgdb 는는 LinuxLinux 시스템에서는 기본 디버거이시스템에서는 기본 디버거이
다다 . gdb. gdb 는 수많은 다른 플랫폼으로 포팅이 되는 수많은 다른 플랫폼으로 포팅이 되
어 있어서어 있어서 ,, 내장 실시간 시스템을 디버깅하는내장 실시간 시스템을 디버깅하는
데도 사용할 수 있다데도 사용할 수 있다
4. Programming with Debugger 44
DBXDBX
dbx symbolic debug programdbx symbolic debug program 은은 Source-levelSource-level 과과
Assembler language-LevelAssembler language-Level 에서 프로그램을 디버깅하에서 프로그램을 디버깅하
는 툴이다는 툴이다 . Source level debugging. Source level debugging 은은 C, C++,C, C++,
Pascal, FortranPascal, Fortran 프로그램을 디버깅할 수 있다프로그램을 디버깅할 수 있다 ..
Assembler language level debuggingAssembler language level debugging 은은 MachineMachine
levellevel 에서 실행 프로그램을 디버깅할 수 있다에서 실행 프로그램을 디버깅할 수 있다 ..
Machine level debuggingMachine level debugging 에서 사용하는 명령어는에서 사용하는 명령어는
Source-level debuggingSource-level debugging 에서 사용하는 명령어와 비슷에서 사용하는 명령어와 비슷
하다하다 ..
dbxdbx 디버그 프로그램을 이용하여 한번에 한 라인씩디버그 프로그램을 이용하여 한번에 한 라인씩
디버그 하고자 하는 프로그램을 끝까지 추적할 수 있디버그 하고자 하는 프로그램을 끝까지 추적할 수 있
고 또한 디버그 프로그램을 중단시키기 위해 프로그램고 또한 디버그 프로그램을 중단시키기 위해 프로그램
에에 BreakpointBreakpoint 를 설정할 수도 있다를 설정할 수도 있다 ..
5. Programming with Debugger 55
DDDDDD
GDBGDB 에서 그래픽컬한 환경을 제공하는 것이에서 그래픽컬한 환경을 제공하는 것이
DDD( Display Data Debugger)DDD( Display Data Debugger) 이다이다 ..
DDDDDD 는 일반적으로 다른 디버거보다 사용하는 일반적으로 다른 디버거보다 사용하
는데 편리한 인터페이스를 제공하고는데 편리한 인터페이스를 제공하고 ,, 또 디버또 디버
깅을 하는데 필요한 환경을 손쉽게 설정할 수깅을 하는데 필요한 환경을 손쉽게 설정할 수
있다있다 .. 하지만하지만 ,, 디버거는 기본적으로디버거는 기본적으로 gdbgdb 를를
사용하고사용하고 ,, 인터페이스만을 제공한다는 점을인터페이스만을 제공한다는 점을
명심 해야한다명심 해야한다 .. 따라서따라서 DDDDDD 는는 gdbgdb 가 꼭 있가 꼭 있
어야만 한다어야만 한다 . gdb. gdb 말고도말고도 , dbx, dbx 나나 xdb, jdbxdb, jdb 를를
이용할 수도 있다이용할 수도 있다 ..
7. Programming with Debugger 77
XxgdbXxgdb
xxgdbxxgdb 는는 gdbgdb 에 기초한에 기초한 XX 윈도우 디버거이윈도우 디버거이
다다 ..
JDBJDB
자바 애플리케이션을 디버그자바 애플리케이션을 디버그 (debug)(debug) 할할
수 있는 자바 도구이다수 있는 자바 도구이다 ..
ITS4ITS4
CigitalCigital 에서 만든 툴로서에서 만든 툴로서 C/C++C/C++ 소스 코드를소스 코드를
검사해 문제점이 있는 코드를 찾아준다검사해 문제점이 있는 코드를 찾아준다 ..
UNIXUNIX 와와 WINDOWSWINDOWS 환경에서도 실행되는환경에서도 실행되는
Command-lineCommand-line 방식의 디버거이다방식의 디버거이다 ..
8. Programming with Debugger 88
RATSRATS
Secure Software SolutionsSecure Software Solutions 에서 만든 툴이다에서 만든 툴이다 ..
RATSRATS 를 사용하면를 사용하면 C, C++, Perl, PHP,C, C++, Perl, PHP, 파이파이
썬 소스 코드의 버그를 발견할 수 있다썬 소스 코드의 버그를 발견할 수 있다 ..
RATSRATS 는 유닉스용과 윈도우용 모두 나와 있기는 유닉스용과 윈도우용 모두 나와 있기
때문에 플랫폼에 구애 받지 않고 사용 가능하다때문에 플랫폼에 구애 받지 않고 사용 가능하다
..
SPLINTSPLINT
미국 버지니아 대학에서 만든미국 버지니아 대학에서 만든 CC 소스 코드 검소스 코드 검
사 툴이다사 툴이다 ..
SplintSplint 는 대학에서 만든 툴답게 다른 툴에 비해는 대학에서 만든 툴답게 다른 툴에 비해
훨씬 체계적으로 소스코드 검사를 할 수 있다는훨씬 체계적으로 소스코드 검사를 할 수 있다는
장점이 있지만 사용하기가 조금 복잡하다는 단장점이 있지만 사용하기가 조금 복잡하다는 단
9. Programming with Debugger 99
FlawfinderFlawfinder
데이빗 휠러데이빗 휠러 (David Wheeler)(David Wheeler) 가 만든가 만든 CC
소스 코드 검사 프로그램이다소스 코드 검사 프로그램이다 ..
FlawfinderFlawfinder 은은 UnixUnix 와 같은 환경에서 작와 같은 환경에서 작
동된다동된다 .. 또또 , Windows, Windows 시스템에도 쉽게시스템에도 쉽게
portport 할 수 있다할 수 있다 .. 실행하기 위해서는실행하기 위해서는
Python 1.5Python 1.5 나 그 이상의 버전이 필요하나 그 이상의 버전이 필요하
다다 ..
10. Programming with Debugger 1010
ProfilingProfiling
ProfilingProfiling 이라고 하는 것은 프로그램의 어떤 부이라고 하는 것은 프로그램의 어떤 부
분이 제일 자주 호출되고 있는지 또는 많은 시분이 제일 자주 호출되고 있는지 또는 많은 시
간을 소요하고 있는지를 조사하는 것이다간을 소요하고 있는지를 조사하는 것이다 .. 코코
드를 최적화시키고 시간이 가장 많이 소비되는드를 최적화시키고 시간이 가장 많이 소비되는
곳을 고쳐주는 좋은 방법이다곳을 고쳐주는 좋은 방법이다 .. 이렇게 하기 위이렇게 하기 위
해서는해서는 -p-p 옵션을 주어서 시간 정보를 오브젝옵션을 주어서 시간 정보를 오브젝
트 화일들이 가질 수 있도록 다시 컴파일 해주트 화일들이 가질 수 있도록 다시 컴파일 해주
어야 한다어야 한다 .. 또한또한 binutilbinutil 패키지에 있는패키지에 있는 gprofgprof
라는 것을 필요로 한다라는 것을 필요로 한다 ..
11. Programming with Debugger 1111
gprpfgprpf
프로파일러는 프로그램의 실제 실행을 통하여 얻어진프로파일러는 프로그램의 실제 실행을 통하여 얻어진
정보를 사용하기 때문에정보를 사용하기 때문에 ,, 소스 코드를 눈으로 보고 분소스 코드를 눈으로 보고 분
석하기에는 벅찬 복잡한 프로그램이나 대형 프로그램석하기에는 벅찬 복잡한 프로그램이나 대형 프로그램
에 사용할 수 있다에 사용할 수 있다 .. 그러나그러나 ,, 프로그램이 어떻게 실행프로그램이 어떻게 실행
되냐에 따라 프로파일 데이터에 나타나는 정보가 달라되냐에 따라 프로파일 데이터에 나타나는 정보가 달라
질 수도 있다질 수도 있다 .. 즉즉 ,, 프로파일하고자 하는 프로그램의프로파일하고자 하는 프로그램의
특정 기능이 프로파일링 과정중에 사용되지 않는다면특정 기능이 프로파일링 과정중에 사용되지 않는다면 ,,
해당 기능에 대한 프로파일 정보를 분석할 수가 없게해당 기능에 대한 프로파일 정보를 분석할 수가 없게
된다된다 .. 프로파일링 분석 결과는 한 개의 파일에 저장되프로파일링 분석 결과는 한 개의 파일에 저장되
며며 ,, 이 파일에는이 파일에는 flat profileflat profile 과과 call graphcall graph 로 불리우는로 불리우는
두 개의 테이블과 이들 테이블의 내용에 대한 간략한두 개의 테이블과 이들 테이블의 내용에 대한 간략한
설명이 포함되어 있다설명이 포함되어 있다 . Flat profile. Flat profile 은 프로그램내의 각은 프로그램내의 각
각의 함수에서 소비된 시간과 각각의 함수가 호출된각의 함수에서 소비된 시간과 각각의 함수가 호출된
횟수에 대한 정보를 표시한다횟수에 대한 정보를 표시한다 ..
12. Programming with Debugger 1212
KprofKprof
KprofKprof 는는 gprofgprof 에 의해서 생성된에 의해서 생성된 profileprofile 를 보기쉽게를 보기쉽게
보여주기 위한 툴이다보여주기 위한 툴이다 . gprof. gprof 에 의해 생성된에 의해 생성된 profileprofile
이 읽기 힘들기 때문에이 읽기 힘들기 때문에 kprofkprof 는 이해하기 쉽도록는 이해하기 쉽도록
list-viewlist-view 나나 tree-viewtree-view 의 형식으로 보여준다의 형식으로 보여준다 ..
GcovGcov
gcovgcov 는는 test coveragetest coverage 프로그램으로프로그램으로 GNUGNU
CCCC 와 함께 사용함으로써 좀 더 효율적이고와 함께 사용함으로써 좀 더 효율적이고 ,,
빠른 속도의 실행 코드를 작성하는데 필요한 프빠른 속도의 실행 코드를 작성하는데 필요한 프
로그램 분석을 위하여 사용한다로그램 분석을 위하여 사용한다 . gcov. gcov 는 코드는 코드
최적화를 사용시 코드의 성능이 향상될 수 있는최적화를 사용시 코드의 성능이 향상될 수 있는
지점을 찾는 프로파일링 툴로 사용할 수 있으지점을 찾는 프로파일링 툴로 사용할 수 있으
며며 , grpof, grpof 와 같은 다른 프로파일링 툴과 함께와 같은 다른 프로파일링 툴과 함께
사용하여 계산 시간의 많은 부분을 점유하는 코사용하여 계산 시간의 많은 부분을 점유하는 코
드 영역을 평가하는데 사용할 수도 있다드 영역을 평가하는데 사용할 수도 있다 ..
14. Programming with Debugger 1414
소스코드 편집하기소스코드 편집하기 22
커서이동커서이동 11
Ctrl-bCtrl-b 한글자 앞으로 이동한글자 앞으로 이동
Ctrl-fCtrl-f 한글자 뒤로 이동한글자 뒤로 이동
Ctrl-pCtrl-p 앞줄로 이동앞줄로 이동
Ctrl-nCtrl-n 뒷줄로 이동뒷줄로 이동
ESC bESC b 한 단어 앞으로 이동한 단어 앞으로 이동
ESC fESC f 한 단어 뒤로 이동한 단어 뒤로 이동
Ctrl-aCtrl-a 현재 줄의 맨 앞으로 이동현재 줄의 맨 앞으로 이동
Ctrl-eCtrl-e 현재 줄의 맨 뒤로 이동현재 줄의 맨 뒤로 이동
15. Programming with Debugger 1515
소스코드 편집하기소스코드 편집하기 33
커서이동커서이동 22
Ctrl-vCtrl-v 한 페이지 아래로 이동한 페이지 아래로 이동
ESC vESC v 한 페이지 위로 이동한 페이지 위로 이동
ESC >ESC > 파일의 맨 끝으로 이동파일의 맨 끝으로 이동
ESC <ESC < 파일의 맨 앞으로 이동파일의 맨 앞으로 이동
ESC aESC a 문장의 맨 앞으로 이동문장의 맨 앞으로 이동
ESC eESC e 문장의 맨 뒤로 이동문장의 맨 뒤로 이동
ESC CtrESC Ctr -a-a 함수의 맨 앞으로 이동함수의 맨 앞으로 이동
ESC CtrESC Ctr -e-e 함수의 맨 뒤로 이동함수의 맨 뒤로 이동
Ctrl-uCtrl-u 이전 명령의 네 번 실행이전 명령의 네 번 실행
16. Programming with Debugger 1616
소스코드 편집하기소스코드 편집하기 44
글을 지우고 되살리기글을 지우고 되살리기
DELDEL 커서의 왼쪽에 있는 글자를 지운다커서의 왼쪽에 있는 글자를 지운다 ..
Ctrl-dCtrl-d 커서 아래의 글자를 지운다커서 아래의 글자를 지운다 ..
ESC DELESC DEL 커서 왼쪽의 단어를 지운다커서 왼쪽의 단어를 지운다 ..
ESC dESC d 커서 오른쪽의 단어를 지운다커서 오른쪽의 단어를 지운다 ..
Ctrl-kCtrl-k 커서 오른쪽부터 줄 끝까지 지운다커서 오른쪽부터 줄 끝까지 지운다 ..
Ctrl-@Ctrl-@ 구역의 시작을 지정한다구역의 시작을 지정한다 ..
Ctrl-wCtrl-w 구역 시작 부분부터 커서 사이의 영역을 지운다구역 시작 부분부터 커서 사이의 영역을 지운다 ..
Ctrl-yCtrl-y 바로 이전에 지운 부분을 되살린다바로 이전에 지운 부분을 되살린다 ..
(( 한 글자의 경우에는 동작하지 않는다한 글자의 경우에는 동작하지 않는다 .).)
ESC yESC y 바로 그 이전에 지운 글을 되살린다바로 그 이전에 지운 글을 되살린다 ..
( Ctrl-y( Ctrl-y 다음에 사용한다다음에 사용한다 .).)
Ctrl-x uCtrl-x u 바로 이전 명령을 취소한다바로 이전 명령을 취소한다 ..
(( 다른 용도로도 많이 사용다른 용도로도 많이 사용 ))
17. Programming with Debugger 1717
소스코드 편집하기소스코드 편집하기 55
찾기와 바꾸기찾기와 바꾸기
Ctrl-sCtrl-s 반복하며 계속 앞으로 찾기를 한다반복하며 계속 앞으로 찾기를 한다 ..
Ctrl-rCtrl-r 반복하며 계속 뒤로 찾기를 한다반복하며 계속 뒤로 찾기를 한다 ..
ESCESC 점진적 찾기를 끝냈다점진적 찾기를 끝냈다 ..
ESC %ESC % 질의 바꾸기질의 바꾸기
!! 질의하지 않고 모든 것을 바꾼다질의하지 않고 모든 것을 바꾼다 ..
nn 찾고자하는 다음 문자열로 건너뛴다찾고자하는 다음 문자열로 건너뛴다 ..
ESCESC 더 나아가지 않고 질의 바꾸기를 끝낸더 나아가지 않고 질의 바꾸기를 끝낸
다다 ..
.. 현재 위치에서 바꾸기를 하고 끝낸다현재 위치에서 바꾸기를 하고 끝낸다 ..
^^ 이전에 일치한 글자로 이동한다이전에 일치한 글자로 이동한다 ..
18. Programming with Debugger 1818
소스코드 편집하기소스코드 편집하기 66
파일 저장하기파일 저장하기
Ctrl-x Ctrl-sCtrl-x Ctrl-s 현재 편집하고 있는 파일을 저장현재 편집하고 있는 파일을 저장
..
Ctrl-x Ctrl-wCtrl-x Ctrl-w 파일을 다른 이름으로 저장파일을 다른 이름으로 저장 ..
Ctrl-x Ctrl-fCtrl-x Ctrl-f 파일을 불러온다파일을 불러온다 ..
Ctrl-x Ctrl-rCtrl-x Ctrl-r 파일을 읽기 전용으로 불러온다파일을 읽기 전용으로 불러온다 ..
Ctrl-x Ctrl-qCtrl-x Ctrl-q 읽기 전용 파일을 기록할 수 있읽기 전용 파일을 기록할 수 있
도록 만들거나도록 만들거나 ,, 그 반대의 동작을 한다그 반대의 동작을 한다 ..
19. Programming with Debugger 1919
소스코드 편집하기소스코드 편집하기 77
다중창다중창
C-x n nC-x n n 개의 창으로 나누기개의 창으로 나누기
C-x 0C-x 0 창 없애기창 없애기
C_x 1C_x 1 창 하나만 남기기창 하나만 남기기
C-x C-fC-x C-f 파일경로 다른 파일 보기파일경로 다른 파일 보기
C-x C-cC-x C-c 모든 프레임 닫기모든 프레임 닫기
20. Programming with Debugger 2020
소스코드 편집하기소스코드 편집하기 88
들여쓰기와 주석 보조 기능들여쓰기와 주석 보조 기능
TabTab 각 행별 자동 들여쓰기각 행별 자동 들여쓰기
코드의 들여쓰기가 잘못되었을 경우 – 커서를 그줄에 두코드의 들여쓰기가 잘못되었을 경우 – 커서를 그줄에 두
고고 TabTab 키키
ESCESC 줄의 맨끝에 주석기호 삽입줄의 맨끝에 주석기호 삽입
쉘창쉘창
ESC x shellESC x shell
21. Programming with Debugger 2121
EmacsEmacs 에서 컴파일에서 컴파일
Esc-x compileEsc-x compile
그 후에 컴파일 모드 설정그 후에 컴파일 모드 설정
cc –g hi.c –o hi <enter>cc –g hi.c –o hi <enter>
Ctrl x `Ctrl x ` 에러 난 줄로 이동하기에러 난 줄로 이동하기
22. Programming with Debugger 2222
gdbgdb 실행하기실행하기
‘‘M-x gdb’M-x gdb’ 를 친다를 친다 ..
그다음에는그다음에는 gdbgdb 에서 어떤 파일을 디버에서 어떤 파일을 디버
거 할 것인지 물어보는 메시지가 출력된거 할 것인지 물어보는 메시지가 출력된
다다 .. 그 뒤에 디버그 할 파일이나그 뒤에 디버그 할 파일이나
process-idprocess-id 를 입력한다를 입력한다 ..
그 다음에는 하나의 창에그 다음에는 하나의 창에 gdbgdb 인터페이인터페이
스가 출력이 된다스가 출력이 된다 .. 그 다음그 다음 gdbgdb 를 사용를 사용
하면 된다하면 된다 ..
23. Programming with Debugger 2323
기본적인 명령어기본적인 명령어 11
정지점 설정하기정지점 설정하기
breakbreak arg :arg : 정지점을 설정한다정지점을 설정한다 ..
info breakinfo break : break: break 를 설정한 모든 정보를 보여준를 설정한 모든 정보를 보여준
다다 ..
disable breakdisable break num : numnum : num 에 해당되는 정지점을에 해당되는 정지점을
비활성화 시킨다비활성화 시킨다 ..
delete breakdelete break numnum : num: num 에 해당되는 정지점을에 해당되는 정지점을
지운다지운다 ..
24. Programming with Debugger 2424
기본적인 명령어기본적인 명령어 22
프로그램 실행프로그램 실행 11
runrun :: 프로그램 내에 정지점을 처음으로 만날 때프로그램 내에 정지점을 처음으로 만날 때
까지 실행한다까지 실행한다 ..
stepstep :: 한 단계씩 실행한다한 단계씩 실행한다 ..
nextnext :: 한 단계씩 실행을 한다한 단계씩 실행을 한다 ..
함수를 호출하는 명령어를 만나면 그 해당하는 함수를 다함수를 호출하는 명령어를 만나면 그 해당하는 함수를 다
실행하고 함수 안으로 들어가지는 않는다실행하고 함수 안으로 들어가지는 않는다 ..
continuecontinue :: 프로그램이 수행중이고 어느줄에서프로그램이 수행중이고 어느줄에서
멈쳐져 잇을 때멈쳐져 잇을 때 ,, 정지점이 설정된 곳까지 프로그램정지점이 설정된 곳까지 프로그램
을 실행하는 명령어이다을 실행하는 명령어이다 ..
25. Programming with Debugger 2525
기본적인 명령어기본적인 명령어 33
프로그램 실행프로그램 실행 22
finishfinish :: 어느 함수에 들어가 있을 경우 그 함수가어느 함수에 들어가 있을 경우 그 함수가
returnreturn 될 때까지 실행하고될 때까지 실행하고 , return, return 값을출력 후에값을출력 후에
곧바로 멈춘다곧바로 멈춘다 ..
returnreturn value:value: 들어가 있는 함수나들어가 있는 함수나 mainmain 에서 나에서 나
머지코드를 수행하지 않고머지코드를 수행하지 않고 vaulevaule 값을값을 returnreturn 한한
다다 ..
jumpjump num : numnum : num 에 해당되는 줄에서부터 프로그에 해당되는 줄에서부터 프로그
램을 실행한다램을 실행한다 .. 현재 있던 줄에서현재 있던 줄에서 numnum 에 해당되에 해당되
는 줄 사이에 있는 코드는 실행하지 않는다는 줄 사이에 있는 코드는 실행하지 않는다 ..
untiluntil :: 순환문이 종료될 때까지 실행 하는 명령어순환문이 종료될 때까지 실행 하는 명령어
..
26. Programming with Debugger 2626
기본적인 명령어기본적인 명령어 44
자료 점검자료 점검
whatiswhatis 표현식표현식 :: 표현식의표현식의 typetype 을 출력해 준다을 출력해 준다 ..
printprint 표현식표현식 :: 표현식에 해당하는 값을 출력표현식에 해당하는 값을 출력
ptypeptype 표현식표현식 : struct: struct 나나 classclass 의의 fieldsfields 의 선언의 선언
을 보여준다을 보여준다 ..
info localsinfo locals :: 현재의 함수 안에 선언된 변수 모두현재의 함수 안에 선언된 변수 모두
를 출력한다를 출력한다 ..
print/<print/< 옵션옵션 >> : option: option 은 해당하는 진수로 출력은 해당하는 진수로 출력
한한 ..
xx(16(16 진수진수 ),), dd(10(10 진수진수 ),), uu(( 양수 십진수양수 십진수 ),), oo(8(8 진수진수 ),), tt(2(2
진수진수 ),), aa(16(16 진수로 절대 주소와 상대주소진수로 절대 주소와 상대주소 ))
displaydisplay 표현식표현식 :: 표현식의 값을 계속 모니터링표현식의 값을 계속 모니터링
27. Programming with Debugger 2727
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 11
명령 자동 실행명령 자동 실행
commandscommands 정지점번호… 명령어들 …정지점번호… 명령어들 … endend ::
프로그램이 실행 중에 정지점 번호에 해당되는 정프로그램이 실행 중에 정지점 번호에 해당되는 정
지점에 도달하면 명령어들을 실행한다지점에 도달하면 명령어들을 실행한다 ..
listlist :: 실행중인 줄번호를 가운데로 놓고 소스코드실행중인 줄번호를 가운데로 놓고 소스코드
1010 줄을 출력줄을 출력
denfinedenfine 명령어이름 … 명령어들 …명령어이름 … 명령어들 … endend ::
commandcommand 와는 다르게 언제든지 명령어들을 실행와는 다르게 언제든지 명령어들을 실행
할 수 있다할 수 있다 ..
sourcesource 명령어가담김파일이름명령어가담김파일이름 :: 해당 파일 에서해당 파일 에서
명령어를 읽어서 실행명령어를 읽어서 실행
28. Programming with Debugger 2828
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 22
stackstack 제어제어
wherewhere :.:. 스택에 쌓여있는 함수들의 정보를 출력스택에 쌓여있는 함수들의 정보를 출력
FrameFrame :: 프레임 번호가 없이 명령어가 실행되면프레임 번호가 없이 명령어가 실행되면
현재 실행중인 함수의현재 실행중인 함수의 stack framestack frame 의 간단한 정보의 간단한 정보
를 출력를 출력
info frameinfo frame :: 현재 실행중인 함수의현재 실행중인 함수의 stack framestack frame
의 자세한 정보를 출력의 자세한 정보를 출력
upup 넘어갈단계수넘어갈단계수 :: 상위 프레임으로상위 프레임으로 ..
downdown 넘어갈단계수넘어갈단계수 :: 하위 프레임으로하위 프레임으로 ..
29. Programming with Debugger 2929
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 33
하드웨어 수준의 제어하드웨어 수준의 제어
info lineinfo line 줄번호줄번호 :: 줄 번호에 해당되는 코드의줄 번호에 해당되는 코드의
메모리내의 시작주소와 끝나는 주소를 보여준다메모리내의 시작주소와 끝나는 주소를 보여준다 ..
diassemblediassemble 시작주소 끝나는주소시작주소 끝나는주소 :: 시작 주소시작 주소
와 끝나는 주소 사이의 어셈블리 언어 코드를 보여와 끝나는 주소 사이의 어셈블리 언어 코드를 보여
준다준다 ..
stepistepi :: 어셈블리 언어 코드 수준의 단계로 실행어셈블리 언어 코드 수준의 단계로 실행 ..
nextinexti :: 어셈블리 언어 코드 수준의 단계로 실행어셈블리 언어 코드 수준의 단계로 실행 ..
어셈블리 코드가 함수를 호출하는 코드이면 그 함수가어셈블리 코드가 함수를 호출하는 코드이면 그 함수가
returnreturn 할 때 까지 계속 실행할 때 까지 계속 실행
30. Programming with Debugger 3030
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 44
shellshell shellshell 명령어명령어 :: gdbgdb 프롬프트 안에서프롬프트 안에서
shellshell 을 사용하기 위한 명령을 사용하기 위한 명령 ..
31. Programming with Debugger 3131
자식 프로세스 디버깅의 어려움자식 프로세스 디버깅의 어려움
여러가지 환경변수로 인해 자식프로세스에게여러가지 환경변수로 인해 자식프로세스에게
디버거를 붙이기가 어렵다디버거를 붙이기가 어렵다 ..
hp-uxhp-ux 에서만 제공하는에서만 제공하는 gdbgdb 에서 사용 가에서 사용 가
능한 명령어능한 명령어
set follow-fork-modeset follow-fork-mode modemode
parent, child, askparent, child, ask
catchcatch 이벤트이벤트
이벤트 종류이벤트 종류 :: execexec,, execvpexecvp,, execlpexeclp,, forkfork,,
vforkvfork 등등
32. Programming with Debugger 3232
편법으로 자식프로세스 디버깅하기편법으로 자식프로세스 디버깅하기 11
이 방법조차 잘 안 먹히는 경우가 많다이 방법조차 잘 안 먹히는 경우가 많다 ..
attachattach process-idprocess-id
현재 실행되고 있는 프로세스에 붙어서 디버깅을현재 실행되고 있는 프로세스에 붙어서 디버깅을
한다한다
꼭꼭 process-idprocess-id 가 붙어야 한다가 붙어야 한다 ..
attachattach 할할 processprocess 는는 gdbgdb 의 밖에서 실행되고 있의 밖에서 실행되고 있
는는 processprocess 이어야 한다이어야 한다 .. 즉즉 backgroundbackground 로 실행로 실행
되고 있는되고 있는 processprocess 이거나 항상이거나 항상 backgroundbackground 로 실로 실
행되는행되는 demon processdemon process 이어야 하는 것이다이어야 하는 것이다 ..
39. Programming with Debugger 3939
gdbgdb 에서 제공하는 명령어에서 제공하는 명령어
breakbreak 줄번호줄번호 threadthread threadthread 번호번호
set scheduler-lockingset scheduler-locking modemode
OffOff :: 언제든지 어느언제든지 어느 threadthread 이든지 실행 가능이든지 실행 가능 ..
OnOn :: 현재 실행중인현재 실행중인 threadthread 만 디버깅동안 실행만 디버깅동안 실행
되어야 한다되어야 한다 ..
StepStep :: 프로그래머가프로그래머가 stepstep 을 하고 있는 동안에는을 하고 있는 동안에는
다른다른 threadthread 는 현재 디버그 중인는 현재 디버그 중인 threadthread 의 실행권의 실행권
을 뺏을 수 없다을 뺏을 수 없다 ..
SunOs 5.8SunOs 5.8 에선 이 모드전환을 지원하지 않는다에선 이 모드전환을 지원하지 않는다 ..
SunOsSunOs 에선 기본값이에선 기본값이 offoff 로 되어 있다로 되어 있다 ..
45. Programming with Debugger 4545
스레드 디버깅하는 요령스레드 디버깅하는 요령
mainmain 에선에선 creatcreat 나나 joinjoin 을 실행할 단계가 오을 실행할 단계가 오
면면 stepstep 을 사용 한다을 사용 한다 ..
ThreadThread 안에 들어오면안에 들어오면 nextnext 를 사용한다를 사용한다 ..
ThreadThread 안에서안에서 waitwait 같은 세마포어 함수를 만같은 세마포어 함수를 만
나서나서 gdbgdb 프롬프트 창이 안 뜨거나 이상한 에프롬프트 창이 안 뜨거나 이상한 에
러메세지가 뜨면러메세지가 뜨면 continuecontinue 를 사용한다를 사용한다 .. 그그
렇게 하면 디버그중인렇게 하면 디버그중인 threadthread 는 잠들고 다른는 잠들고 다른
threadthread 로 보통 실행이 넘어간다로 보통 실행이 넘어간다 ..
46. Programming with Debugger 4646
실습 예제실습 예제
http://home.postech.ac.kr/~sinclair/doc/gdb/http://home.postech.ac.kr/~sinclair/doc/gdb/
gcovgcov
http://purple.icu.ac.kr/~kimkk/guide/gcov/gcov_1.htmlhttp://purple.icu.ac.kr/~kimkk/guide/gcov/gcov_1.html
kprofkprof
http://www.opensource.co.kr/opensource/proj.php3?http://www.opensource.co.kr/opensource/proj.php3?
projcode=106220&page=1projcode=106220&page=1
프로파일링프로파일링
http://kldp.org/HOWTO/html/GCC/GCC-HOWTO-5.htmlhttp://kldp.org/HOWTO/html/GCC/GCC-HOWTO-5.html
DBXDBX
http://it.soongsil.ac.kr/webzine/c/debugger.htmlhttp://it.soongsil.ac.kr/webzine/c/debugger.html
GDBGDB 명령어 리스트명령어 리스트
http://database.sarang.net/study/gdb/html/gdb-man.htmlhttp://database.sarang.net/study/gdb/html/gdb-man.html
Debugging with GDBDebugging with GDB
GNU Software – GNUGNU Software – GNU 소프트에어로 프로그래밍하기소프트에어로 프로그래밍하기
O’Reilly /O’Reilly / 한빛미디어한빛미디어