SlideShare a Scribd company logo
1 of 46
ProgramminProgrammin
gg
withwith
DebuggingDebugging
22 조조
정낙천정낙천 (6(6 기기 ))
박상현박상현 (6(6 기기 ))
윤석우윤석우 (6(6 기기 ))
bugbug
Programming with Debugger 22
UNIX/LINUXUNIX/LINUX 디버거의 종류디버거의 종류
GDBGDB 와와 EmacsEmacs
EmacsEmacs 에서 소스코드 편집하기에서 소스코드 편집하기
EmacsEmacs 에서 컴파일 및에서 컴파일 및 gdbgdb 실행하기실행하기
GDBGDB 사용하기사용하기
기본적인기본적인 ,, 쓸만한 명령어들쓸만한 명령어들
자식프로세스 디버깅 하기자식프로세스 디버깅 하기
스레드 디버깅 하기스레드 디버깅 하기
참고자료참고자료
Programming with Debugger 33
GDBGDB
gdbgdb 는 아주 강력하며는 아주 강력하며 ,, 자유롭게 구할 수도자유롭게 구할 수도
있으며있으며 ,, 다양한다양한 UNIXUNIX 플랫폼에서 돌아간다플랫폼에서 돌아간다 ..
gdbgdb 는는 LinuxLinux 시스템에서는 기본 디버거이시스템에서는 기본 디버거이
다다 . gdb. gdb 는 수많은 다른 플랫폼으로 포팅이 되는 수많은 다른 플랫폼으로 포팅이 되
어 있어서어 있어서 ,, 내장 실시간 시스템을 디버깅하는내장 실시간 시스템을 디버깅하는
데도 사용할 수 있다데도 사용할 수 있다
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 를 설정할 수도 있다를 설정할 수도 있다 ..
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 를를
이용할 수도 있다이용할 수도 있다 ..
Programming with Debugger 66
DDDDDD
실행화실행화
면면
Programming with Debugger 77
XxgdbXxgdb
xxgdbxxgdb 는는 gdbgdb 에 기초한에 기초한 XX 윈도우 디버거이윈도우 디버거이
다다 ..
JDBJDB
자바 애플리케이션을 디버그자바 애플리케이션을 디버그 (debug)(debug) 할할
수 있는 자바 도구이다수 있는 자바 도구이다 ..
ITS4ITS4
CigitalCigital 에서 만든 툴로서에서 만든 툴로서 C/C++C/C++ 소스 코드를소스 코드를
검사해 문제점이 있는 코드를 찾아준다검사해 문제점이 있는 코드를 찾아준다 ..
UNIXUNIX 와와 WINDOWSWINDOWS 환경에서도 실행되는환경에서도 실행되는
Command-lineCommand-line 방식의 디버거이다방식의 디버거이다 ..
Programming with Debugger 88
RATSRATS
Secure Software SolutionsSecure Software Solutions 에서 만든 툴이다에서 만든 툴이다 ..
RATSRATS 를 사용하면를 사용하면 C, C++, Perl, PHP,C, C++, Perl, PHP, 파이파이
썬 소스 코드의 버그를 발견할 수 있다썬 소스 코드의 버그를 발견할 수 있다 ..
RATSRATS 는 유닉스용과 윈도우용 모두 나와 있기는 유닉스용과 윈도우용 모두 나와 있기
때문에 플랫폼에 구애 받지 않고 사용 가능하다때문에 플랫폼에 구애 받지 않고 사용 가능하다
..
SPLINTSPLINT
미국 버지니아 대학에서 만든미국 버지니아 대학에서 만든 CC 소스 코드 검소스 코드 검
사 툴이다사 툴이다 ..
SplintSplint 는 대학에서 만든 툴답게 다른 툴에 비해는 대학에서 만든 툴답게 다른 툴에 비해
훨씬 체계적으로 소스코드 검사를 할 수 있다는훨씬 체계적으로 소스코드 검사를 할 수 있다는
장점이 있지만 사용하기가 조금 복잡하다는 단장점이 있지만 사용하기가 조금 복잡하다는 단
Programming with Debugger 99
FlawfinderFlawfinder
데이빗 휠러데이빗 휠러 (David Wheeler)(David Wheeler) 가 만든가 만든 CC
소스 코드 검사 프로그램이다소스 코드 검사 프로그램이다 ..
FlawfinderFlawfinder 은은 UnixUnix 와 같은 환경에서 작와 같은 환경에서 작
동된다동된다 .. 또또 , Windows, Windows 시스템에도 쉽게시스템에도 쉽게
portport 할 수 있다할 수 있다 .. 실행하기 위해서는실행하기 위해서는
Python 1.5Python 1.5 나 그 이상의 버전이 필요하나 그 이상의 버전이 필요하
다다 ..
Programming with Debugger 1010
ProfilingProfiling
ProfilingProfiling 이라고 하는 것은 프로그램의 어떤 부이라고 하는 것은 프로그램의 어떤 부
분이 제일 자주 호출되고 있는지 또는 많은 시분이 제일 자주 호출되고 있는지 또는 많은 시
간을 소요하고 있는지를 조사하는 것이다간을 소요하고 있는지를 조사하는 것이다 .. 코코
드를 최적화시키고 시간이 가장 많이 소비되는드를 최적화시키고 시간이 가장 많이 소비되는
곳을 고쳐주는 좋은 방법이다곳을 고쳐주는 좋은 방법이다 .. 이렇게 하기 위이렇게 하기 위
해서는해서는 -p-p 옵션을 주어서 시간 정보를 오브젝옵션을 주어서 시간 정보를 오브젝
트 화일들이 가질 수 있도록 다시 컴파일 해주트 화일들이 가질 수 있도록 다시 컴파일 해주
어야 한다어야 한다 .. 또한또한 binutilbinutil 패키지에 있는패키지에 있는 gprofgprof
라는 것을 필요로 한다라는 것을 필요로 한다 ..
Programming with Debugger 1111
gprpfgprpf
프로파일러는 프로그램의 실제 실행을 통하여 얻어진프로파일러는 프로그램의 실제 실행을 통하여 얻어진
정보를 사용하기 때문에정보를 사용하기 때문에 ,, 소스 코드를 눈으로 보고 분소스 코드를 눈으로 보고 분
석하기에는 벅찬 복잡한 프로그램이나 대형 프로그램석하기에는 벅찬 복잡한 프로그램이나 대형 프로그램
에 사용할 수 있다에 사용할 수 있다 .. 그러나그러나 ,, 프로그램이 어떻게 실행프로그램이 어떻게 실행
되냐에 따라 프로파일 데이터에 나타나는 정보가 달라되냐에 따라 프로파일 데이터에 나타나는 정보가 달라
질 수도 있다질 수도 있다 .. 즉즉 ,, 프로파일하고자 하는 프로그램의프로파일하고자 하는 프로그램의
특정 기능이 프로파일링 과정중에 사용되지 않는다면특정 기능이 프로파일링 과정중에 사용되지 않는다면 ,,
해당 기능에 대한 프로파일 정보를 분석할 수가 없게해당 기능에 대한 프로파일 정보를 분석할 수가 없게
된다된다 .. 프로파일링 분석 결과는 한 개의 파일에 저장되프로파일링 분석 결과는 한 개의 파일에 저장되
며며 ,, 이 파일에는이 파일에는 flat profileflat profile 과과 call graphcall graph 로 불리우는로 불리우는
두 개의 테이블과 이들 테이블의 내용에 대한 간략한두 개의 테이블과 이들 테이블의 내용에 대한 간략한
설명이 포함되어 있다설명이 포함되어 있다 . Flat profile. Flat profile 은 프로그램내의 각은 프로그램내의 각
각의 함수에서 소비된 시간과 각각의 함수가 호출된각의 함수에서 소비된 시간과 각각의 함수가 호출된
횟수에 대한 정보를 표시한다횟수에 대한 정보를 표시한다 ..
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 와 같은 다른 프로파일링 툴과 함께와 같은 다른 프로파일링 툴과 함께
사용하여 계산 시간의 많은 부분을 점유하는 코사용하여 계산 시간의 많은 부분을 점유하는 코
드 영역을 평가하는데 사용할 수도 있다드 영역을 평가하는데 사용할 수도 있다 ..
Programming with Debugger 1313
소스코드 편집하기소스코드 편집하기 11
EmaceEmace 시작하기시작하기
% Emacs hi.c% Emacs hi.c
종료하기종료하기
Ctrl-x Ctrl-cCtrl-x Ctrl-c
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 현재 줄의 맨 뒤로 이동현재 줄의 맨 뒤로 이동
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 이전 명령의 네 번 실행이전 명령의 네 번 실행
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 바로 이전 명령을 취소한다바로 이전 명령을 취소한다 ..
(( 다른 용도로도 많이 사용다른 용도로도 많이 사용 ))
Programming with Debugger 1717
소스코드 편집하기소스코드 편집하기 55
찾기와 바꾸기찾기와 바꾸기
Ctrl-sCtrl-s 반복하며 계속 앞으로 찾기를 한다반복하며 계속 앞으로 찾기를 한다 ..
Ctrl-rCtrl-r 반복하며 계속 뒤로 찾기를 한다반복하며 계속 뒤로 찾기를 한다 ..
ESCESC 점진적 찾기를 끝냈다점진적 찾기를 끝냈다 ..
ESC %ESC % 질의 바꾸기질의 바꾸기
!! 질의하지 않고 모든 것을 바꾼다질의하지 않고 모든 것을 바꾼다 ..
nn 찾고자하는 다음 문자열로 건너뛴다찾고자하는 다음 문자열로 건너뛴다 ..
ESCESC 더 나아가지 않고 질의 바꾸기를 끝낸더 나아가지 않고 질의 바꾸기를 끝낸
다다 ..
.. 현재 위치에서 바꾸기를 하고 끝낸다현재 위치에서 바꾸기를 하고 끝낸다 ..
^^ 이전에 일치한 글자로 이동한다이전에 일치한 글자로 이동한다 ..
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 읽기 전용 파일을 기록할 수 있읽기 전용 파일을 기록할 수 있
도록 만들거나도록 만들거나 ,, 그 반대의 동작을 한다그 반대의 동작을 한다 ..
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 모든 프레임 닫기모든 프레임 닫기
Programming with Debugger 2020
소스코드 편집하기소스코드 편집하기 88
들여쓰기와 주석 보조 기능들여쓰기와 주석 보조 기능
TabTab 각 행별 자동 들여쓰기각 행별 자동 들여쓰기
코드의 들여쓰기가 잘못되었을 경우 – 커서를 그줄에 두코드의 들여쓰기가 잘못되었을 경우 – 커서를 그줄에 두
고고 TabTab 키키
ESCESC 줄의 맨끝에 주석기호 삽입줄의 맨끝에 주석기호 삽입
쉘창쉘창
ESC x shellESC x shell
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 ` 에러 난 줄로 이동하기에러 난 줄로 이동하기
Programming with Debugger 2222
gdbgdb 실행하기실행하기
‘‘M-x gdb’M-x gdb’ 를 친다를 친다 ..
그다음에는그다음에는 gdbgdb 에서 어떤 파일을 디버에서 어떤 파일을 디버
거 할 것인지 물어보는 메시지가 출력된거 할 것인지 물어보는 메시지가 출력된
다다 .. 그 뒤에 디버그 할 파일이나그 뒤에 디버그 할 파일이나
process-idprocess-id 를 입력한다를 입력한다 ..
그 다음에는 하나의 창에그 다음에는 하나의 창에 gdbgdb 인터페이인터페이
스가 출력이 된다스가 출력이 된다 .. 그 다음그 다음 gdbgdb 를 사용를 사용
하면 된다하면 된다 ..
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 에 해당되는 정지점을에 해당되는 정지점을
지운다지운다 ..
Programming with Debugger 2424
기본적인 명령어기본적인 명령어 22
프로그램 실행프로그램 실행 11
runrun :: 프로그램 내에 정지점을 처음으로 만날 때프로그램 내에 정지점을 처음으로 만날 때
까지 실행한다까지 실행한다 ..
stepstep :: 한 단계씩 실행한다한 단계씩 실행한다 ..
nextnext :: 한 단계씩 실행을 한다한 단계씩 실행을 한다 ..
함수를 호출하는 명령어를 만나면 그 해당하는 함수를 다함수를 호출하는 명령어를 만나면 그 해당하는 함수를 다
실행하고 함수 안으로 들어가지는 않는다실행하고 함수 안으로 들어가지는 않는다 ..
continuecontinue :: 프로그램이 수행중이고 어느줄에서프로그램이 수행중이고 어느줄에서
멈쳐져 잇을 때멈쳐져 잇을 때 ,, 정지점이 설정된 곳까지 프로그램정지점이 설정된 곳까지 프로그램
을 실행하는 명령어이다을 실행하는 명령어이다 ..
Programming with Debugger 2525
기본적인 명령어기본적인 명령어 33
프로그램 실행프로그램 실행 22
finishfinish :: 어느 함수에 들어가 있을 경우 그 함수가어느 함수에 들어가 있을 경우 그 함수가
returnreturn 될 때까지 실행하고될 때까지 실행하고 , return, return 값을출력 후에값을출력 후에
곧바로 멈춘다곧바로 멈춘다 ..
returnreturn value:value: 들어가 있는 함수나들어가 있는 함수나 mainmain 에서 나에서 나
머지코드를 수행하지 않고머지코드를 수행하지 않고 vaulevaule 값을값을 returnreturn 한한
다다 ..
jumpjump num : numnum : num 에 해당되는 줄에서부터 프로그에 해당되는 줄에서부터 프로그
램을 실행한다램을 실행한다 .. 현재 있던 줄에서현재 있던 줄에서 numnum 에 해당되에 해당되
는 줄 사이에 있는 코드는 실행하지 않는다는 줄 사이에 있는 코드는 실행하지 않는다 ..
untiluntil :: 순환문이 종료될 때까지 실행 하는 명령어순환문이 종료될 때까지 실행 하는 명령어
..
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 표현식표현식 :: 표현식의 값을 계속 모니터링표현식의 값을 계속 모니터링
Programming with Debugger 2727
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 11
명령 자동 실행명령 자동 실행
commandscommands 정지점번호… 명령어들 …정지점번호… 명령어들 … endend ::
프로그램이 실행 중에 정지점 번호에 해당되는 정프로그램이 실행 중에 정지점 번호에 해당되는 정
지점에 도달하면 명령어들을 실행한다지점에 도달하면 명령어들을 실행한다 ..
listlist :: 실행중인 줄번호를 가운데로 놓고 소스코드실행중인 줄번호를 가운데로 놓고 소스코드
1010 줄을 출력줄을 출력
denfinedenfine 명령어이름 … 명령어들 …명령어이름 … 명령어들 … endend ::
commandcommand 와는 다르게 언제든지 명령어들을 실행와는 다르게 언제든지 명령어들을 실행
할 수 있다할 수 있다 ..
sourcesource 명령어가담김파일이름명령어가담김파일이름 :: 해당 파일 에서해당 파일 에서
명령어를 읽어서 실행명령어를 읽어서 실행
Programming with Debugger 2828
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 22
stackstack 제어제어
wherewhere :.:. 스택에 쌓여있는 함수들의 정보를 출력스택에 쌓여있는 함수들의 정보를 출력
FrameFrame :: 프레임 번호가 없이 명령어가 실행되면프레임 번호가 없이 명령어가 실행되면
현재 실행중인 함수의현재 실행중인 함수의 stack framestack frame 의 간단한 정보의 간단한 정보
를 출력를 출력
info frameinfo frame :: 현재 실행중인 함수의현재 실행중인 함수의 stack framestack frame
의 자세한 정보를 출력의 자세한 정보를 출력
upup 넘어갈단계수넘어갈단계수 :: 상위 프레임으로상위 프레임으로 ..
downdown 넘어갈단계수넘어갈단계수 :: 하위 프레임으로하위 프레임으로 ..
Programming with Debugger 2929
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 33
하드웨어 수준의 제어하드웨어 수준의 제어
info lineinfo line 줄번호줄번호 :: 줄 번호에 해당되는 코드의줄 번호에 해당되는 코드의
메모리내의 시작주소와 끝나는 주소를 보여준다메모리내의 시작주소와 끝나는 주소를 보여준다 ..
diassemblediassemble 시작주소 끝나는주소시작주소 끝나는주소 :: 시작 주소시작 주소
와 끝나는 주소 사이의 어셈블리 언어 코드를 보여와 끝나는 주소 사이의 어셈블리 언어 코드를 보여
준다준다 ..
stepistepi :: 어셈블리 언어 코드 수준의 단계로 실행어셈블리 언어 코드 수준의 단계로 실행 ..
nextinexti :: 어셈블리 언어 코드 수준의 단계로 실행어셈블리 언어 코드 수준의 단계로 실행 ..
어셈블리 코드가 함수를 호출하는 코드이면 그 함수가어셈블리 코드가 함수를 호출하는 코드이면 그 함수가
returnreturn 할 때 까지 계속 실행할 때 까지 계속 실행
Programming with Debugger 3030
그 외 쓸만한 명령어들그 외 쓸만한 명령어들 44
shellshell shellshell 명령어명령어 :: gdbgdb 프롬프트 안에서프롬프트 안에서
shellshell 을 사용하기 위한 명령을 사용하기 위한 명령 ..
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 등등
Programming with Debugger 3232
편법으로 자식프로세스 디버깅하기편법으로 자식프로세스 디버깅하기 11
이 방법조차 잘 안 먹히는 경우가 많다이 방법조차 잘 안 먹히는 경우가 많다 ..
attachattach process-idprocess-id
현재 실행되고 있는 프로세스에 붙어서 디버깅을현재 실행되고 있는 프로세스에 붙어서 디버깅을
한다한다
꼭꼭 process-idprocess-id 가 붙어야 한다가 붙어야 한다 ..
attachattach 할할 processprocess 는는 gdbgdb 의 밖에서 실행되고 있의 밖에서 실행되고 있
는는 processprocess 이어야 한다이어야 한다 .. 즉즉 backgroundbackground 로 실행로 실행
되고 있는되고 있는 processprocess 이거나 항상이거나 항상 backgroundbackground 로 실로 실
행되는행되는 demon processdemon process 이어야 하는 것이다이어야 하는 것이다 ..
Programming with Debugger 3333
편법으로 자식프로세스 디버깅하기편법으로 자식프로세스 디버깅하기 22
detachdetach : attach: attach 로로 processprocess 를 디버그한 후를 디버그한 후
에에 attachattach 한한 pricesspricess 에서 나가자고 할땐에서 나가자고 할땐
detachdetach 명령어를 써야 한다명령어를 써야 한다 ..
순서순서
소스에소스에 sellp(); -> breakpoint ->sellp(); -> breakpoint -> 실행실행 ->->
finish -> shell ps –a -> attach -> continue ->finish -> shell ps –a -> attach -> continue ->
디버깅 시작디버깅 시작
Programming with Debugger 3434
예제소스예제소스 -- 전반전반
Programming with Debugger 3535
예제소스예제소스 -- 후반후반
Programming with Debugger 3636
자식프로세스로 디버깅하기 결과자식프로세스로 디버깅하기 결과 11
Programming with Debugger 3737
자식프로세스로 디버깅하기 결과자식프로세스로 디버깅하기 결과 11
Programming with Debugger 3838
자식프로세스로 디버깅하기 결과자식프로세스로 디버깅하기 결과 22
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 로 되어 있다로 되어 있다 ..
Programming with Debugger 4040
예제소스예제소스 11
Programming with Debugger 4141
예제소스예제소스 22
Programming with Debugger 4242
예제소스예제소스 33
Programming with Debugger 4343
예제소스예제소스 4 –4 – 읽는 스레드읽는 스레드
Programming with Debugger 4444
예제소스예제소스 5 –5 – 쓰는 스레드쓰는 스레드
Programming with Debugger 4545
스레드 디버깅하는 요령스레드 디버깅하는 요령
mainmain 에선에선 creatcreat 나나 joinjoin 을 실행할 단계가 오을 실행할 단계가 오
면면 stepstep 을 사용 한다을 사용 한다 ..
ThreadThread 안에 들어오면안에 들어오면 nextnext 를 사용한다를 사용한다 ..
ThreadThread 안에서안에서 waitwait 같은 세마포어 함수를 만같은 세마포어 함수를 만
나서나서 gdbgdb 프롬프트 창이 안 뜨거나 이상한 에프롬프트 창이 안 뜨거나 이상한 에
러메세지가 뜨면러메세지가 뜨면 continuecontinue 를 사용한다를 사용한다 .. 그그
렇게 하면 디버그중인렇게 하면 디버그중인 threadthread 는 잠들고 다른는 잠들고 다른
threadthread 로 보통 실행이 넘어간다로 보통 실행이 넘어간다 ..
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 / 한빛미디어한빛미디어

More Related Content

What's hot

GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)상현 조
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System상현 조
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발흥배 최
 
2016 hack festival igrus
2016 hack festival igrus2016 hack festival igrus
2016 hack festival igrusJinookawk
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11흥배 최
 
GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance
GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple InhertanceGCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance
GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance상현 조
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)Sang Don Kim
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연
200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연
200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연Joohyun Han
 
200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료Joohyun Han
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Insuk (Chris) Cho
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러우경 성
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)khuhacker
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013Esun Kim
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)Kyoungchan Lee
 
windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. JobHyosung Jeon
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?NAVER D2
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)상욱 송
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APIHongmin Park
 

What's hot (20)

GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)
 
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group SystemGCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
GCGC- CGCII 서버 엔진에 적용된 기술 (8) - Group System
 
C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발C#을 사용한 빠른 툴 개발
C#을 사용한 빠른 툴 개발
 
2016 hack festival igrus
2016 hack festival igrus2016 hack festival igrus
2016 hack festival igrus
 
WTL 소개
WTL 소개WTL 소개
WTL 소개
 
[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11[KGC 2011]Boost 라이브러리와 C++11
[KGC 2011]Boost 라이브러리와 C++11
 
GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance
GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple InhertanceGCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance
GCGC- CGCII 서버 엔진에 적용된 기술 (7) - Multiple Inhertance
 
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
[Td 2015]녹슨 c++ 코드에 모던 c++로 기름칠하기(옥찬호)
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연
200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연
200725 AWS 클라우드 컴퓨팅으로 배우는 생물정보학 - 덕성여대 강연
 
200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료200523 서울여대 BI 코딩실무 강의 자료
200523 서울여대 BI 코딩실무 강의 자료
 
Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017Python vs Java @ PyCon Korea 2017
Python vs Java @ PyCon Korea 2017
 
모두의 JIT 컴파일러
모두의 JIT 컴파일러모두의 JIT 컴파일러
모두의 JIT 컴파일러
 
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
2015 제2회 동아리 해커 세미나 - 병렬컴퓨팅 소개 (16기 김정현)
 
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
사례를 통해 살펴보는 프로파일링과 최적화 NDC2013
 
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
GopherCon Korea 2015 - Python 개발자를 위한 Go (이경찬)
 
windows via c++ Ch 5. Job
windows via c++ Ch 5. Jobwindows via c++ Ch 5. Job
windows via c++ Ch 5. Job
 
[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?[143] Modern C++ 무조건 써야 해?
[143] Modern C++ 무조건 써야 해?
 
Let's Go (golang)
Let's Go (golang)Let's Go (golang)
Let's Go (golang)
 
Ch7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and APICh7,8. Configmaps, Secrets and API
Ch7,8. Configmaps, Secrets and API
 

Viewers also liked

책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅Byoenghan Baek
 
디버거 소개
디버거 소개디버거 소개
디버거 소개JuHong Jeong
 
Introduction to gdb
Introduction to gdbIntroduction to gdb
Introduction to gdbOwen Hsu
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니Lusain Kim
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부hyun soomyung
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬KTH, 케이티하이텔
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기HyunSeung Kim
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정Yoonwhan Lee
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTYoung D
 
[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법Amy Kim
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4ukjinkwoun
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composerjhyeon1010
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링Seungmo Koo
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 Seungmo Koo
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3성일 한
 

Viewers also liked (20)

책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅책 요약 - Debug it ! 실용주의 디버깅
책 요약 - Debug it ! 실용주의 디버깅
 
디버거 소개
디버거 소개디버거 소개
디버거 소개
 
Introduction to gdb
Introduction to gdbIntroduction to gdb
Introduction to gdb
 
당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니당신의 디버깅에 니코니코니
당신의 디버깅에 니코니코니
 
실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부실전 윈도우 디버깅. Ch3. 디버거 해부
실전 윈도우 디버깅. Ch3. 디버거 해부
 
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
H3 2011 대형사이트 구축을 위한 MySQL 튜닝전략_데이터지능팀_성동찬
 
Mysql old password 깨기
Mysql old password 깨기Mysql old password 깨기
Mysql old password 깨기
 
쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정쿠키를 통해 구현해보는 간단한 로그인 과정
쿠키를 통해 구현해보는 간단한 로그인 과정
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDTPHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
PHP 개발 생산성을 높여주는 통합 개발 환경 - 이클립스 PDT
 
Exception&log
Exception&logException&log
Exception&log
 
PHP Profiling
PHP ProfilingPHP Profiling
PHP Profiling
 
[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법[2015:1] phpdocumentor 설치와 사용법
[2015:1] phpdocumentor 설치와 사용법
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4대규모 서비스를 지탱하는 기술 Ch 4
대규모 서비스를 지탱하는 기술 Ch 4
 
xecon-phpfest2014composer
xecon-phpfest2014composerxecon-phpfest2014composer
xecon-phpfest2014composer
 
게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링게임서버프로그래밍 #5 - 데이터베이스 핸들링
게임서버프로그래밍 #5 - 데이터베이스 핸들링
 
NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개 NHN NEXT 2014년도 게임트랙 소개
NHN NEXT 2014년도 게임트랙 소개
 
Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3Laravel 로 배우는 서버사이드 #3
Laravel 로 배우는 서버사이드 #3
 
Log4j 사용법
Log4j 사용법Log4j 사용법
Log4j 사용법
 

Similar to programming with GDB

Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3Wooseok Seo
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2Wooseok Seo
 
망고100 보드로 놀아보자 3
망고100 보드로 놀아보자 3망고100 보드로 놀아보자 3
망고100 보드로 놀아보자 3종인 전
 
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서Lee Sang-Ho
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
cross compile
cross compilecross compile
cross compilehe4722
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기Jaeseung Ha
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)Tae Young Lee
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기zupet
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) Tae Young Lee
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012Esun Kim
 
효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축guest0ad316e
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기진현 조
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9진현 조
 
Malzilla tutorial2
Malzilla tutorial2Malzilla tutorial2
Malzilla tutorial2re4lfl0w
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .YEONG-CHEON YOU
 

Similar to programming with GDB (20)

Windows Debugging Technique #3
Windows Debugging Technique #3Windows Debugging Technique #3
Windows Debugging Technique #3
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
망고100 보드로 놀아보자 3
망고100 보드로 놀아보자 3망고100 보드로 놀아보자 3
망고100 보드로 놀아보자 3
 
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
[강릉원주대 대기환경과학과] 대기과학전산입문 설명서
 
Node.js in Flitto
Node.js in FlittoNode.js in Flitto
Node.js in Flitto
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
cross compile
cross compilecross compile
cross compile
 
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
NDC 2017 하재승 NEXON ZERO (넥슨 제로) 점검없이 실시간으로 코드 수정 및 게임 정보 수집하기
 
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
파이썬 데이터과학 1일차 - 초보자를 위한 데이터분석, 데이터시각화 (이태영)
 
팀장 잔소리
팀장 잔소리팀장 잔소리
팀장 잔소리
 
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기헤테로지니어스 컴퓨팅 :  CPU 에서 GPU 로 옮겨가기
헤테로지니어스 컴퓨팅 : CPU 에서 GPU 로 옮겨가기
 
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영) 파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
파이썬 데이터과학 레벨1 - 초보자를 위한 데이터분석, 데이터시각화 (2020년 이태영)
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
덤프 파일을 통한 사후 디버깅 실용 테크닉 NDC2012
 
Mongodb tip42 50
Mongodb tip42 50Mongodb tip42 50
Mongodb tip42 50
 
효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축효과적인 임베디드 디버깅 환경구축
효과적인 임베디드 디버깅 환경구축
 
[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기[조진현] [Kgc2011]direct x11 이야기
[조진현] [Kgc2011]direct x11 이야기
 
[0312 조진현] good bye dx9
[0312 조진현] good bye dx9[0312 조진현] good bye dx9
[0312 조진현] good bye dx9
 
Malzilla tutorial2
Malzilla tutorial2Malzilla tutorial2
Malzilla tutorial2
 
Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .Tips and experience of DX12 Engine development .
Tips and experience of DX12 Engine development .
 

More from NakCheon Jung

More from NakCheon Jung (7)

technical report
technical reporttechnical report
technical report
 
2005_Structures and functions of Makefile
2005_Structures and functions of Makefile2005_Structures and functions of Makefile
2005_Structures and functions of Makefile
 
2004_P2P chatting program
2004_P2P chatting program2004_P2P chatting program
2004_P2P chatting program
 
KCC2007_VoIP
KCC2007_VoIPKCC2007_VoIP
KCC2007_VoIP
 
master_thesis
master_thesismaster_thesis
master_thesis
 
ice_grad
ice_gradice_grad
ice_grad
 
ce_grad
ce_gradce_grad
ce_grad
 

programming with GDB

  • 1. ProgramminProgrammin gg withwith DebuggingDebugging 22 조조 정낙천정낙천 (6(6 기기 )) 박상현박상현 (6(6 기기 )) 윤석우윤석우 (6(6 기기 )) bugbug
  • 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 를를 이용할 수도 있다이용할 수도 있다 ..
  • 6. Programming with Debugger 66 DDDDDD 실행화실행화 면면
  • 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 와 같은 다른 프로파일링 툴과 함께와 같은 다른 프로파일링 툴과 함께 사용하여 계산 시간의 많은 부분을 점유하는 코사용하여 계산 시간의 많은 부분을 점유하는 코 드 영역을 평가하는데 사용할 수도 있다드 영역을 평가하는데 사용할 수도 있다 ..
  • 13. Programming with Debugger 1313 소스코드 편집하기소스코드 편집하기 11 EmaceEmace 시작하기시작하기 % Emacs hi.c% Emacs hi.c 종료하기종료하기 Ctrl-x Ctrl-cCtrl-x Ctrl-c
  • 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 이어야 하는 것이다이어야 하는 것이다 ..
  • 33. Programming with Debugger 3333 편법으로 자식프로세스 디버깅하기편법으로 자식프로세스 디버깅하기 22 detachdetach : attach: attach 로로 processprocess 를 디버그한 후를 디버그한 후 에에 attachattach 한한 pricesspricess 에서 나가자고 할땐에서 나가자고 할땐 detachdetach 명령어를 써야 한다명령어를 써야 한다 .. 순서순서 소스에소스에 sellp(); -> breakpoint ->sellp(); -> breakpoint -> 실행실행 ->-> finish -> shell ps –a -> attach -> continue ->finish -> shell ps –a -> attach -> continue -> 디버깅 시작디버깅 시작
  • 34. Programming with Debugger 3434 예제소스예제소스 -- 전반전반
  • 35. Programming with Debugger 3535 예제소스예제소스 -- 후반후반
  • 36. Programming with Debugger 3636 자식프로세스로 디버깅하기 결과자식프로세스로 디버깅하기 결과 11
  • 37. Programming with Debugger 3737 자식프로세스로 디버깅하기 결과자식프로세스로 디버깅하기 결과 11
  • 38. Programming with Debugger 3838 자식프로세스로 디버깅하기 결과자식프로세스로 디버깅하기 결과 22
  • 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 로 되어 있다로 되어 있다 ..
  • 40. Programming with Debugger 4040 예제소스예제소스 11
  • 41. Programming with Debugger 4141 예제소스예제소스 22
  • 42. Programming with Debugger 4242 예제소스예제소스 33
  • 43. Programming with Debugger 4343 예제소스예제소스 4 –4 – 읽는 스레드읽는 스레드
  • 44. Programming with Debugger 4444 예제소스예제소스 5 –5 – 쓰는 스레드쓰는 스레드
  • 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 / 한빛미디어한빛미디어