kgc10 - visual c++10과 디버깅

57
Visual C++ 10 과 과과과 과과과과 과과과과과과 과과과 과과 과과과과과 과과과 MS Visual C++ MVP Twitter : @jacking75

Upload: -

Post on 18-Jun-2015

2.910 views

Category:

Technology


14 download

TRANSCRIPT

Page 1: KGC10 - Visual C++10과 디버깅

Visual C++ 10 과 디버깅

마이에트 엔터테인먼트 건즈팀서버 프로그래머

최흥배MS Visual C++ MVPTwitter : @jacking75

Page 2: KGC10 - Visual C++10과 디버깅
Page 3: KGC10 - Visual C++10과 디버깅

VS2010 스터디 팀 멤버로 활동 중 http://vsts2010.net

Page 4: KGC10 - Visual C++10과 디버깅
Page 5: KGC10 - Visual C++10과 디버깅

신입 프로그래머일 때 일정을 지키지 못하는 이유 ? 디버깅

Page 6: KGC10 - Visual C++10과 디버깅

디버깅 시간 단축하기 위한 방법

Page 7: KGC10 - Visual C++10과 디버깅

디버깅 시간 단축하기 위한 방법

Page 8: KGC10 - Visual C++10과 디버깅

디버깅 시간 단축하기 위한 방법

Page 9: KGC10 - Visual C++10과 디버깅

디버깅 시간 단축하기 위한 방법

Page 10: KGC10 - Visual C++10과 디버깅

디버깅 시간 단축하기 위한 방법

Page 11: KGC10 - Visual C++10과 디버깅

Visual C++10

Page 12: KGC10 - Visual C++10과 디버깅

VC++ 디버깅의 기초

Visual C++ 10

• F9 – 브레이크 포인트 설정 / 해제

• F5 – 디버깅 시작

• F10 – Step Over

• F11 – Step In

Page 13: KGC10 - Visual C++10과 디버깅

함수에 브레이크 포인터 빠르게 설정하기

Visual C++ 10

• 단축키 Ctrl + B

Page 14: KGC10 - Visual C++10과 디버깅

다음에 실행될 문 변경

Visual C++ 10

Page 15: KGC10 - Visual C++10과 디버깅

포인터 배열의 내용을 보고 싶을 때

Visual C++ 10

Page 16: KGC10 - Visual C++10과 디버깅

프로그램 실행 도중 변수 값 변경

Visual C++ 10

Page 17: KGC10 - Visual C++10과 디버깅

다음에 실행될 문 변경

DEMO

Page 18: KGC10 - Visual C++10과 디버깅

포인터 배열의 내용을 보고 싶을 때

DEMO

Page 19: KGC10 - Visual C++10과 디버깅

프로그램 실행 도중 변수 값 변경

DEMO

Page 20: KGC10 - Visual C++10과 디버깅

중단점 조건

Visual C++ 10

Page 21: KGC10 - Visual C++10과 디버깅

적중 횟수

Visual C++ 10

Page 22: KGC10 - Visual C++10과 디버깅

중단점 조건 , 적중 횟수

DEMO

Page 23: KGC10 - Visual C++10과 디버깅

중단점 필터

Visual C++ 10

Page 24: KGC10 - Visual C++10과 디버깅

중단점이 적중될 때

Visual C++ 10

Page 25: KGC10 - Visual C++10과 디버깅

중단점이 적중될 때

DEMO

Page 26: KGC10 - Visual C++10과 디버깅

레이블

Visual C++ 10

• 그룹화로 브레이크 포인트 on/off 도 가능

Page 27: KGC10 - Visual C++10과 디버깅

레이블

DEMO

Page 28: KGC10 - Visual C++10과 디버깅

프로세스에 연결

Visual C++ 10

Page 29: KGC10 - Visual C++10과 디버깅

프로세스에 연결

DEMO

Page 30: KGC10 - Visual C++10과 디버깅

조사 식 , 직접 실행

Visual C++ 10

Page 31: KGC10 - Visual C++10과 디버깅

조사 식 , 직접 실행

DEMO

Page 32: KGC10 - Visual C++10과 디버깅

중단점 내보내기 / 가져오기

Visual C++ 10

Page 33: KGC10 - Visual C++10과 디버깅

DataTips

Visual C++ 10

Page 34: KGC10 - Visual C++10과 디버깅

중단점 내보내기 / 가져오기, DataTips

DEMO

Page 35: KGC10 - Visual C++10과 디버깅

병렬 프로그래밍 디버깅

Visual C++ 10

Page 36: KGC10 - Visual C++10과 디버깅

병렬 프로그래밍 디버깅

DEMO

Page 37: KGC10 - Visual C++10과 디버깅

안전한 함수 호출

Visual C++ 10

#define _CRT_SECURE_CPP_OVERLOAD_STANDAD_NAMES 1

void func(char *p) { char d[20]; strcpy(d,p); // 기타}

안전하지 않은 코드

void func(char *p) { char d[20]; strcpy_s(d, __countof(d), p); // 기타}

안전한 코드

Page 38: KGC10 - Visual C++10과 디버깅

VS 의 코드분석

Visual C++ 10

• 정적 분석 툴

• 컴파일 타임 시에 버그가 발생할 코드를 경고

Page 39: KGC10 - Visual C++10과 디버깅

VS 의 코드분석 – 버퍼 침범 찾기

DEMO

Page 40: KGC10 - Visual C++10과 디버깅

유틸리티

Page 41: KGC10 - Visual C++10과 디버깅

Microsoft Configuration Capture(MPS_REPORTS)

버그가 발생한 Windows 의 OS 버전서비스 팩 버전인스톨된 애플리케이션 , 패치 머신의 스펙 정보 ( 이것은 시간 몇분 걸린다 )등의 정보를 모은다 .

Windows Me 나 98 이전은 지원하지 않는다 .

http://support.microsoft.com/?scid=kb%3Bko%3B818742&x=12&y=16

Page 42: KGC10 - Visual C++10과 디버깅

Microsoft Configuration Capture(MPS_REPORTS)

DEMO

Page 43: KGC10 - Visual C++10과 디버깅

Problem Steps Recorder

애플리케이션에 문제가 발생했을 때의 조작 스크린 샷이나 주석을 기록하여 레포트를 만들어주는 툴 . Window 7, Windows Server 2008 R2 에 기본 내장

Page 44: KGC10 - Visual C++10과 디버깅

DEMO

Problem Steps Recorder

Page 45: KGC10 - Visual C++10과 디버깅

애플리케이션 베리파이어

프로그램의 Heaps, Handles, Locks, Memory 등의 문제를 발견하여 보고GUI 모드 및 커맨드 모드로 실행 가능

상세한 설명‘ 실전 윈도우 디버깅’ ( 정보문화사 ). p9, p747갱주니님 블로그 http://process3.blog.me/20050862664

다운로드http://www.microsoft.com/downloads/details.aspx?FamilyID=c4a25ab9-649d-4a1b-b4a7-c9d8b095df18&displayLang=en

Page 46: KGC10 - Visual C++10과 디버깅

Visual Leak Detector(VLD) - 메모리 누수 추적

• 메모리 누스를 추적 해 주는 라이브러리

• VC++ 6 에서 VC++ 10 까지 대부분의 VC++ 지원

• 사이트 , 다운로드 http://vld.codeplex.com/

• 간단 설명 http://blog.naver.com/snaphacker/50035487803

Page 47: KGC10 - Visual C++10과 디버깅

Debug Diagnostic Tool

• 덤프를 풀 덤프로 ( 마우스 ) 오른쪽 버튼 클릭 한방으로 만들 수 있다 (WinDbg 로도 가능하지만 훨씬 간단 )

• 복수 개의 덤프를 대상으로 행인지 아닌지 분석해 준다

• 크래쉬한 덤프도 분석해 준다 .

• 다운로드 http://www.microsoft.com/downloads/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en

Page 48: KGC10 - Visual C++10과 디버깅

google-breakpad

• Google 이 만든 오픈소스로 멀티 플랫폼에서 사용할 수 있는 크래쉬 리포팅 시스템

• 애플리케이션에 문제가 발생하면 ( 크래쉬 ) 크래쉬 덤프를 생성하고 , 크래쉬 덤프랑 애플리케이션 로그를 서버에 전송

• Firefox 에서 사용 중

• 사이트 http://code.google.com/p/google-breakpad/

Page 49: KGC10 - Visual C++10과 디버깅

google-breakpad – VC++10 에서 사용하기

공식 사이트에서 svn 을 통해 소스를 다운로드

빌드 하기- 멀티 플랫폼 빌드를 위해 breakpad 는 gyp 라는 것을 사용- gyp 를 사용하기 위해서 python 이 필수 . 꼭 2.x 대 버전만 사용해야 된다- breakpad 를 ‘ E:\Projects\google-breakpad’ 에 설치했다고 가정- 콘솔 창에서 ‘ E:\Projects\google-breakpad\src\tools\gyp’ 로 이동

- 위와 같이 입력한다- ‘E:\Projects\google-breakpad\src\client\windows’ Visual Studio 솔루션 파일이 생성된다 .- ‘breakpad_client.sln’ 파일을 열어서 빌드 , lib 파일을 만든다 .

Page 50: KGC10 - Visual C++10과 디버깅

google-breakpad – VC++10 에서 사용하기

VS 프로젝트에 헤더 파일 및 lib 파일 등록

Page 51: KGC10 - Visual C++10과 디버깅

google-breakpad – Visual C++10 에서 빌드 실패 해결

1. gtest 실패Google 의 UnitTest 프레임워크인 gtest 는 Visual C++ 10 을 지원하지 않고

있다gtest 빌드가 필수는 아니므로 빌드 실패를 무시해도 된다 .꼭 빌드를 하고 싶다면 여기를 참고 http://jacking.tistory.com/572

Page 52: KGC10 - Visual C++10과 디버깅

2. common.lib 빌드 실패‘E:\Projects\google-breakpad\src\third_party\glog\glog\src\windows\

glog\logging.h’을 열지 못한다는 에러가 발생 . 아래 그림처럼 변경

‘vlos_is_on.h’ 을 열지 못한다는 에러가 발생 . 아래 그림처럼 변경

google-breakpad – Visual C++ 10 에서 빌드 실패 해결

Page 53: KGC10 - Visual C++10과 디버깅

google-breakpad

DEMO

Page 54: KGC10 - Visual C++10과 디버깅

BugTrap

• 오픈소스로 윈도우 플랫폼에 특화된 크래쉬 리포팅 시스템

• 국내의 많은 게임 회사에서 사용 중

• 사이트 http://www.codeproject.com/KB/applications/BugTrap.aspx 사용 방법 설명 ( 한글 ) http://blog.naver.com/agebreak/60033448666 http://loveru0.egloos.com/1351931 http://smstock.tistory.com/entry/BugTrap-%EC%84%A4%EC%A0%95%EC%8B%9C-%EB%AC%B8%EC%A0%9C%EC%A0%90%EB%93%A4

http://blog.daum.net/pdpdds/15700795

Page 55: KGC10 - Visual C++10과 디버깅

마이에트 엔터테인먼트 사에서 만든 프로그램으로 공개http://maiet.tistory.com/4596

기능덤프 파일을 분석하여 분석 정보를 txt 파일로 남겨준다 .덤프 파일 이름 앞에 콜스택 최상위 함수 이름을 붙여준다 .최근에 수집된 덤프 파일 목록을 이메일로 알려준다 .

필요 사항WinDbg, .NET Framework 가 설치되어 있어야 한다 .리포트 이메일을 보내려면 SMTP 서버가 있어야 한다 .

사용 방법dmp 파일이 있는 경로에서 바로 DumpAnalyzer.exe 를 실행하거나 인자로 덤프 파일이 있는 대상 경로를 지정한다 .자세한 사용 방법은 'DumpAnalyzer /?' 라고 실행하면 나온다 .

크래쉬 덤프 분석기 - DumpAna-lyzer

Page 56: KGC10 - Visual C++10과 디버깅
Page 57: KGC10 - Visual C++10과 디버깅

참고

저의 블로그 http://jacking.tistory.com/VS2010 팀 블로그 http://vsts2010.net 갱주니 블로그 http://process3.blog.me