Page 1 WDB 를 사용한 프로그램 디버깅 2002. 2. 21 강사 : 이 욱준 차장 HPCS/SDO/MC.

Slides:



Advertisements
Similar presentations
CI(Continuous Integration) 이학성. C ontinuous I ntegration? 2 지속적으로 품질관리 를 적용하는 과정 개발자가 기존 코드의 수정 작업 을 시작할 때, 코드 베이스의복사본을 받아서 작업을 시작하면서 코드의 변경.
Advertisements

.Net History. Visual Studio.Net 2002 /.Net Framework 1.0 제품의 버전 / 특징 2002 년 - Visual Studio.Net 2002 /.Net Framework 1.0 첫 통합 개발 환경 - C# 언어 등장 (C# 1.0)
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
쉽게 풀어쓴 C언어 Express 제2장 프로그램 개발과정 C Express Slide 1 (of 31)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Image & Video processing
1장 리눅스의 기본 개념과 프로그램 작성 리눅스의 기본 개념 시스템에 접속하기 리눅스의 프로그래밍 환경
코크파트너 설치 가이드 Window 7.
Power Java 제3장 이클립스 사용하기.
Power Java 제3장 이클립스 사용하기.
Cross Compiler를이용한 커널 컴파일 및 포팅
제 9 장 구조체와 공용체.
Power Java 제2장 자바 개발 도구.
Linux/UNIX Programming
쉽게 풀어쓴 C언어 Express 제17장 동적메모리와 연결리스트 C Express Slide 1 (of 13)
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
C / C++ Programming in multi platform
Visual Basic .NET 처음 사용하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
Root Filesystem Porting
메시지 큐[5] – test1.c 메시지 제어: msgctl(2) #include <sys/msg.h>
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
ARM Development Suite v1.2
Cross Compiler 설치.
Sungkyunkwan University OS Project Dongkun Shin
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
Method & library.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
UNIT 07 Memory Map 로봇 SW 교육원 조용수.
이름 : 황 상 두 전화번호 : 이메일 : PinTool 이름 : 황 상 두 전화번호 : 이메일 :
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
메모리 관리 & 동적 할당.
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
24장. 파일 입출력.
Homework #6 (1/3) 다음을 수행한 후, 화면(혹은 파일)을 출력하여 제출한다.
Adobe 제품 다운로드 및 설치 방법 안내 Adobe Creative Cloud Adobe License 권한을 받으신 분
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
자바 5.0 프로그래밍.
제9장 C 프로그래밍 환경 TOPCIT (Test of Practical Competency in IT)
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
PMIS 서버 설정 환경설정 작성자 : 배경환.
Homework 7… 마지막 수업시간까지 (실습) 매개변수로 입력 받아 처리할 수 있도록 수정해 보세요
Outlook 손상된 PST 복구
Kernel, Ramdisk, JFFS2 Porting
( Windows Service Application Debugging )
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
OpenCV 설정 2.21 만든이 딩딩.
DK-128 개발환경 설정 아이티즌 기술연구소
05. General Linear List – Homework
GDB - GNU Debugger 김진용.
Tensorboard in Windows
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
발표자 : 이지연 Programming Systems Lab.
슬라이드 쇼의 설정 슬라이드 쇼의 실행 파일과 폴더의 관리 글꼴을 포함해서 저장 웹 페이지로 게시 압축 파일
과제 4: Thread (5월 9일까지) 4장 연습문제 풀이
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Installation Guide.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
CODE INJECTION 시스템B 김한슬.
Presentation transcript:

Page 1 WDB 를 사용한 프로그램 디버깅 강사 : 이 욱준 차장 HPCS/SDO/MC

Page 2 Agenda 디버깅 개요 디버거 개요 WDB 소개 및 History WDB 사용법 디버깅 예 디버깅 팁 Q & A

WDB Page 3 디버깅 이란 ? 프로그램 작성중 발생한 에러의 근본 원인을 찾아내고 고치는 일련의 프로세스 프로젝트 기간의 50% 까지 차지할 수 있다. 코드의 안정성과 완벽함을 높이는 필수적인 작업이다.

WDB Page 4 디버깅 테크닉 툴의 사용 wdb, gdb, adb 프로그램 review printf() 문의 삽입 의도된 동작을 일으켜 원인 추측 특정 실행 경로의 조사 System call trace : tusc

WDB Page 5 디버거 란 ? 디버거는 실행중인 프로그램의 상태를 확인할 수 있는 툴이다. 디버거는 프로그램상의 오류를 발견하고 고칠 수 있게 해주는 도구이다.

WDB Page 6 일반적인 디버거 기능 프로그램 실행 breakpoint 에서 프로그램의 정지 한번에 한 라인씩 실행 변수의 값 출력 signal 처리

WDB Page 7 WDB 란 ? HP WDB 는 GDB 디버거를 HP 상에서 구현한 디버거 이다. WDB 는 오브젝트 파일의 소스레벨 디버깅을 지원하며, HP-UX 이상의 HP C, HP aC++, Fortran 90, 및 FORTRAN77 에서 사용 가능하다. HP WDB 3.x 은 HP-UX 10.20, 11.0 및 시스템에서 권장하는 디버거이다. HP WDB 1.3.x 은 HP-UX 또는 그 이후 버전에서 동작하는 Itanium 기반의 시스템에서 권장하는 디버거이다. HP DDE 나 xdb 와 같은 디버거는 향후 출시되는 HP- UX 에서는 지원되지 않을 수 있다.

WDB Page 8 WDB History - pre-wdb <1992 HP-UX xdb 를 대체하기 위한 HP-UX, Motif 에 포팅된 HP 고유의 디버거 (DDE) 공유 라이브러리, 디버그 형식 등에 HP 고유의 인터페이스 사용 PA-RISC 1.1 GNU: FSF 에서 만든 gcc, gdb, emacs, hurd,…free source... GNU/Linux: Minix 와 공존한 초기 OS 0.1 은 FSF component 및 POSIX 인터페이스 사용 …open source... GNU/HP-UX: gcc/gdb 가 HP platform 에서 작동

WDB Page 9 WDB History - ~ 1995 DDE 가 xdb 를 대체 못함, 수정하기 위한 많은 노력... 경쟁사 분석 DDE vs. Sun, SGI, Totalview, IBM, Microsoft… 기존 아키텍쳐의 한계 : 복잡성 ; 예 ) optimize 된 코드의 디버그, parallelism, 분산 프로그램... IA-64 아키텍쳐... 개선하기 힘든 사항 ; 예 ) 성능 … 결론 : 새로운 디버거의 탄생 시기 도래 및 & 새로운 아키텍쳐의 대두 높은 수준의 요구 사항 영향 분석 ; gdb: 기능의 분리 ; reasonable C/C++; robust; 친숙한 인터페이스 gdb 의 결여 사항 : GUI, 64- bit, Fortran, parallelism,...

WDB Page 10 WDB History – 1997 ~ wdb 0.75; HP 컴파일러 지원 ; aCC, exceptions,... HP shared library 지원 HP-UX: hw watchpoints, kernel threads, … xdb 와 호환성 제공 : -tui -xdb wdb 1.0; Fortran 64-bit; PA-RISC 2.0 +objdebug link times wdb 1.1; user-space thread 지원 gdb 4.17 과 통합 GUI 인터페이스 wdb 1.2; 새로운 “signal” 및 “Debugger Preferences” 다이알로그 새로운 Recent Files menu 를 사용한 소스파일 간의 빠른 전환 wdb 2.0; 프로그램 즉시 수정 기능 메모리 점검 기능 함수의 소스 보기 기능 프로그램 콘솔의 xterm 지원 wdb 2.1; gdb 5.0 을 기반으로 함. 50% 빠른 로드 속도 incrementally linked 64-bit 프로그램의 디버깅 지원 wdb 3.0; 메모리 leak detection 및 heap 분석 기능 (run-time checking (RTC)) 의 기능 강화 large core 파일 (> 2GB) 의 디버깅 지원. Java/C/aCC stack unwinding 지원

WDB Page 11 WDB 코맨드 - wdb 의 기동 및 정지 cc -g sourcefile.c -g 옵션은 gdb 가 필요한 모든 정보를 제공한다. wdb filename `filename' 은 실행 파일의 이름이다. wdb 를 멈추려면, `q‘ (quit) 를 입력한다.

WDB Page 12 WDB 코맨드 – 초화면

WDB Page 13 WDB 코맨드 - wdb 상에서 프로그램 실행 r command = run command, 해당 프로그램을 실행한다. Command-line argument 가 있으면 같이 기술해 준다. 만약 프로그램을 아래와 같이 실행하면 : a.out < z, gdb 에서 아래와 같이 입력한다. r < z

WDB Page 14 WDB 코맨드 – 소스 보기 l command = list command. 소스 파일의 내용을 참조할 때 사용한다. 52 라인부터 파일의 내용을 표시하려면 : One source file: l 52 More sources: l X.c:52 함수명을 지정하면, 해당 함수의 첫번째 라인부터 표시한다.

WDB Page 15 WDB 코맨드 – 소스 보기 화면

WDB Page 16 WDB 코맨드 - Breakpoints b command = breakpoint command. 30 라인에서 프로그램을 멈추려면 : One source: b 30 More sources: b X.c:30 프로그램의 실행을 계속하려면, `c' (continue command) 를 입력한다.

WDB Page 17 WDB 코맨드 - Breakpoints 해당 함수 앞에서 프로그램을 멈추려면 : One source: b my_fun disable command 를 사용하여 breakpoint 를 취소할 수 있다 : disable 3 enable command 를 사용하여 breakpoint 를 re-enable 할 수 있다 : enable 3 모든 breakpoint 의 정보를 보려면 : info breakpoints

WDB Page 18 WDB 코맨드 – Breakpoints 화면

WDB Page 19 WDB 코맨드 - Display / Print disp command = display command. 프로그램이 멈출 때마다 지정한 변수 및 수식을 표시한다. p command = print command. 지정한 변수 및 수식을 한번만 표시한다. int I,J,X[50]; disp X[12*I+J] - 20 p i

WDB Page 20 WDB 코맨드 - Display / Print gdb 에서 struct 변수를 출력하면, 구조체의 각각의 필드가 출력될 것이다. 만약 array 를 선택하면, 모든 array 값이 출력된다. undisplay command 를 사용하여 disp command 에서 설정한 것을 취소할 수 있다.

WDB Page 21 WDB 코맨드 - Display / Print int G; p G 는 아래의 표현식과 동일하다 : printf("%d\n",G); p /x G 는 아래의 표현식과 동일하다 : printf("%x\n",G);

WDB Page 22 WDB 코맨드 - Display / Print 화면

WDB Page 23 WDB 코맨드 - Next / Step n command = next command s command = step command 함수 앞에서 `s' 코맨드를 사용하면, 파라미터의 값도 알 수 있다.

WDB Page 24 WDB 코맨드 - Backtracking bt command = backtracking command 실행 도중 ``bus error'' 나 ``segmentation fault'‘ 와 같은 에러 메시지가 나올 경우, `bt' command 를 사용하면 프로그램의 어디에서 위의 문제가 발생했는지, 그리고 함수 안에서 발생했으면, 어디에서 해당 함수를 불렀는지 알 수 있다. 이런 정보는 디버깅시 매우 유용하게 사용할 수 있다.

WDB Page 25 WDB 코맨드 - Kill kill command: gdb 에서 실행중인 프로그램을 종료 시킨다. 예를 들면, gdb 가 기존 실행파일을 잡고 있으면 프로그램의 재컴파일시 에러가 발생하는데, 이런 경우에 사용할 수 있다.

WDB Page 26 디버깅 예 – Input/Output 프로그램 실행시 입력 / 출력이 필요할 때, 프로그램 콘솔 창을 사용한다.

WDB Page 27 디버깅 예 – Core Dump Core Dump 란 ? HP-UX 시스템은 특정 signal 을 받을 경우에 해당 프로세스의 이미지를 파일로 작성한다. 이때, 이 이미지는 이상종료시의 프로그램 상태를 가지고 있다. 대부분의 경우, memory violation, illegal instruction, floating point exception, bus error 및 사용자의 quit signal 에 의해 발생한다. post-mortem 으로 아래와 같이 소스코드를 디버깅할 수 있다 : wdb executable-file core-file

WDB Page 28 디버깅 예 – Multi Thread 프로그램 Thread 란 ? 프로세스 안에서 독자적으로 존재하는 제어의 흐름으로, context (register set 및 프로그램 counter 포함 ) 및 실행할 일련의 명령어로 구성되어 있다. 모든 thread 에 대해 bt 코맨드를 실행하려면 : thread apply all bt Thread 2 번의 변수 i 의 값을 보려면 : thread apply 2 p i 1 번 thread 로 전환하려면 : thread 1

WDB Page 29 디버깅 예 – Memory leak Memory leak 이란 ? Leak 이란 프로그램에서 데이터 영역을 할당하였지만 free 하지 않고, 프로그램에서도 더 이상 사용하지 않는 것을 말한다. 일반적으로 해당 데이터 영역에 대한 포인터가 없어서 free 할 수 없는 경우, 또는 해당 메모리가 사용 가능하지만 프로그램 상에서 재사용하지 않는 경우이다. 모든 경우에 메모리의 낭비가 있다.

WDB Page 30 디버깅 예 – Memory leak 확인 방법 – batch 모드 32-bit 프로그램의 경우, /opt/langtools/lib/librtc.a 를 link. 64-bit 프로그램의 경우, /opt/langtools/lib/pa20_64/librtc.a 를 link. C 라이브러리 및 core 라이브러리의 아카이브 버전 (/usr/lib/libc.a, /usr/lib/libcl.a) 을 사용중이면, 상응하는 shared 버전으로 변경한다. 해당 어플리케이션을 –lcl 옵션을 사용하여 core 라이브러리와 link 한다. 프로그램 실행 /tmp/gdbrtc.log 파일을 확인하여, memory leak 이 발생했는지 검사한다.

WDB Page 31 디버깅 예 – Memory leak 확인 방법 – interactive 모드 32-bit 프로그램의 경우, /opt/langtools/lib/librtc.sl 를 link. 64-bit 프로그램의 경우, /opt/langtools/lib/pa20_64/librtc.sl 를 link. C 라이브러리 및 core 라이브러리의 아카이브 버전 (/usr/lib/libc.a, /usr/lib/libcl.a) 을 사용중이면, 상응하는 shared 버전으로 변경한다. wdb 기동 후, “set heap-check leaks on“ 코맨드를 실행한다. Breakpoint 를 사용하여 어플리케이션을 정지시킨 후, “info leaks” 코맨드를 사용하여 내용을 확인한다.

WDB Page 32 디버깅 팁 – Abort Signal Abort Signal 을 보면 문제의 원인을 알 수 있다. SIGBUS: NULL pointer 의 사용 가능성 SIGSEGV: pointer 의 사용 오류, 잘못된 코드 영역으로의 쓰기 오류, 또는 데이터 영역으로의 분기 오류 가능성 SIGFPE: 0 으로 나누기 오류

WDB Page 33 Q & A

Page 34 Thanks