예전에 Visual C++ 10과 관련된 책을 집필할 계획이 있어서 그때 작성한 글인데 책 출간 계획이 사라졌으므로(한참 전에)

그냥 공개합니다. 글은 초보자를 타겟으로 하고 있으며 Visula C++ 10의 디버깅 기능을 설명하고 있습니다.


도움이 되었으면 좋겠습니다^^



6장 디버깅.pdf


저작자 표시
신고
by 흥배 2012.04.23 09:00

현재 SP1 베타가 나온 상태입니다.

개인적으로 제가 생각한 부분과 꽤 다른 부분이 많았습니다. 저는 Concurrency Runtime의 컨테이너나 알고리즘이 추가될지 알았는데 그렇지 않고 의외로 MFC에서 추가가 있었습니다.

 

추가되는 기능은

MFC-based GPU-accelerated graphics and animations

New AMD and Intel Instruction Set Support

Managed Incremental Build parity with Visual Studio 2008

Help Viewer

Addressing Customer Issues

 

 

그리고 VC++에 해당하는 버그 픽스 리스트는 아래와 같습니다.

 SSE2 instructions generated when /arch:SSE is specified

Missing destructor calls when optimization is enabled

Code generation bug in x64 C++ compiler (optimizer)

C++ compiler generates incorrect movups instructions iso movss

Optimizer bug (/Og) with the 64-bit 2010 Beta 2 compiler.

Visual Studio 2010 VC++ Concurrent Runtime libraries leak memory

concurrent_queue causes crash

Memory leaks reported when using simple parallel_for code

ftell returns negative value for UTF-8 files opened with textmode and ccs

vector::erase returns incompatible iterator in debug build

tr1:regex has different behavior between vs2008 and vs2010 on some regular expression

inserting in a std::vector of std::string causes memory leak

CRecordset/DoFieldExchange not working properly in Visual Studio 2010

 

 

 

MFC-based GPU-accelerated graphics and animations Win32 API Direct2D, DirectWrite Windows Animation Manager MFC용 라이브러리를 말합니다. 이중 Direct2D, DirectWrite Win7에서만 사용할 수 있습니다. Win7에서 GDI를 사용한다는 것은 크나큰 하드웨어 낭비입니다. 가능한 Direct2D, DirectWrite를 사용해야 합니다. Direct2D, DirectWrite는 기존의 GDI DirectX와 통합도 잘 됩니다. 만약 Win7에서 2D 게임을 만든다면 어렵게 DirectX를 사용할 필요 없이 Direct2D를 사용하면 됩니다.

 

 

몇 달 전에 VC++ MVP들의 메일링에서 Direct2D 같은 것들이 MFC에 안들어왔냐? MFC 버리기냐? 라고 따진 분이 계셨는데 드디어 들어왔네요. 정말 오랜만에 MFC에 공부할게 생겼네요^^

 

 

SP1에 대한 자세한 내용은 아래를 참고하세요

http://blogs.msdn.com/b/vcblog/archive/2010/12/09/vs2010-sp1-beta-what-s-on-it-for-c-developers.aspx

http://blogs.msdn.com/b/jasonz/archive/2010/12/20/visual-studio-2010-service-pack-1-beta-feedback.aspx

 

저작자 표시
신고
by 흥배 2010.12.22 00:40
세미나에서 제가 살짝 정신줄을 놓아서(? -_-;;) 이 부분 설명이 미흡했는데

int* p = nullptr;
p = new int[200];

에서 p의 첫번째 위치에서 11번째만 보고 싶은 경우는
(p+10)



11번째에서 5개만 보고 싶은 경우는
(p+10), 5




저작자 표시
신고
by 흥배 2010.12.16 21:57
세미나에서 제가 살짝 정신줄을 놓아서(? -_-;;) 이 부분 설명이 미흡했는데

int* p = nullptr;
p = new int[200];

에서 p의 첫번째 위치에서 11번째만 보고 싶은 경우는
(p+10)



11번째에서 5개만 보고 싶은 경우는
(p+10), 5




저작자 표시
신고
by 흥배 2010.12.16 21:57

VS2008까지는도구’ – ‘옵션메뉴를 통해서 VC++ 디렉토리를 설정하였습니다.

이렇게 설정한 정보는 모든 VC++ 프로젝트에 적용됩니다.

 

그러나 VS2010에서는 각 프로젝트 별로 VC++ 디렉토리를 설정합니다.


 

 

각 프로젝트 마다 독립적으로 설정을 할 수 있어서 편한 부분도 있지만 때로는 모든 프로젝트에 공통적으로 적용되어야 하는 경우는 매번 설정하는 것이 귀찮을 수 있습니다.

( 예로 DirectX boost 라이브러리 등 )

 

이런 경우속성 매니저를 통해서 VC++ 디렉토리를 설정하면 모든 프로젝트에 공통적으로 적용할 수 있습니다.

 

1. 일단 아무 프로젝트 하나를 열어 놓습니다.

2. 메뉴의보기’ -> ‘속성 관리자를 선택합니다.

 

 

3. 속성 관리자에서 ‘Microsoft.Cpp.Win32.user’를 더블 클릭해서 열어 놓습니다.


 

여기서 설정한 정보는 모든 프로젝트에 공통적으로 적용됩니다.

저작자 표시
신고
by 흥배 2010.10.28 09:00

VS.NET(VS2002)에서 MFC 프로젝트로 만들었던 프로그램을 VC++10 프로젝트로 변환하여 컴파일 했더니 에러가 발생하면서 아래의 경고가 나왔습니다.

C:\Program Files\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlcore.h(35):#error This file requires _WIN32_WINNT to be #defined at least to 0x0403. Value 0x0501 or higher is recommended.

 

에러 내용은 프로젝트에서 정의된 _WIN32_WINNT 버전이 0x403인데 atlcore.h 버전이 최소 0x0501 이상이 되어야 한다는 것입니다.

 

그래서 _WIN32_WINN 정의한 stdafx.h 파일을 열어보니

#define _WIN32_WINNT 0x0400

되어 있었더군요. 그래서 일단 이것을 최신이 좋다라는 생각에 아래와 같이 했습니다. ^^;;

#define _WIN32_WINNT 0x0600

 

그랬더니 이제는 아래와 같은 에러가 나오더군요. -_-;

c:\program files\microsoft visual studio 10.0\vc\atlmfc\include\afxcmn3.inl(29): error C2065: 'CCM_SETWINDOWTHEME' : 선언되지 않은 식별자입니다.

 

그래서 바로 구글링 들어갔습니다.

쉽게 저와 같은 에러가 나와서 질문을 올린 글을 찾았고 답변도 보았습니다.

문제 해결은 stdafx.h 파일에 정의된 버전의 숫자를 아래와 같이 하면 된다고 하더군요

// Modify the following defines if you have to target a platform prior to the ones specified below.
// Refer to MSDN for the latest info on corresponding values for different platforms.
#ifndef WINVER // Allow use of features specific to Windows 95 and Windows NT 4 or later.
#define WINVER 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif

#ifndef _WIN32_WINNT // Allow use of features specific to Windows NT 4 or later.
#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target Windows 98 and Windows 2000 or later.
#endif

#ifndef _WIN32_WINDOWS // Allow use of features specific to Windows 98 or later.
#define _WIN32_WINDOWS 0x0501 // Change this to the appropriate value to target Windows Me or later.
#endif

#ifndef _WIN32_IE // Allow use of features specific to IE 4.0 or later.
#define _WIN32_IE 0x0500 // Change this to the appropriate value to target IE 5.0 or later.
#endif

 

이렇게 하니 문제 없이 빌드가 성공 되었습니다.

 

주위에서 VC++의 새로운 버전이 나와도 쉽게 사용하지 못하는 경우가 오래 전에 만들었던 프로젝트를 포팅 할 수 없어서 이전 버전을 어쩔 수 없이 사용한다는 이야기를 종종 듣습니다.

그러나 저는 운이 좋아서인지 2002버전부터 순차적으로 새 버전의 VC++을 사용할 수 있어서 VC++6에서 VS2002로 넘어갈 때만 빌드 문제를 겪었습니다.

그래서 이런 포팅에 대한 문제는 잘 알지 못합니다. 이번에는 예전에 만들었던 코드를 C++0x 코드로 바꾸고 싶어서 오래 전에 만들었던 프로젝트를 VC++ 10로 포팅하면서 정말 정말 오랜만에 이런 문제를 겪어 보게 되고 해결 방법을 포스팅 할 수 있었습니다.

 

혹시 앞으로 또 이런 경우가 발생하면 바로 바로 공유하도록 하겠습니다
저작자 표시
신고
by 흥배 2010.10.26 09:00

VC++ 10 C++0x나 병렬 프로그래밍 라이브러리 이외에도 툴적인 측면에서도 여러 좋은 기능들이 추가 되었습니다. 알고 있으면 작업할 때 편리한데 시간이 부족하여 제가 아직 자세하게 찾아보지 못해서 소개하지 못한 것이 많이 아쉽습니다. 그래서 짥은 것이라도 틈틈이 시간나면 소개하려고 합니다.

 

VC++ 10에서는 디버깅 모드에서도 역어셈블리 코드를 볼 수 있습니다.

 

메뉴에서 “Debug” -> “Windows” -> “Disassembly”를 선택합니다.

 

아래와 같이 역어셈블리 코드 창이 나타납니다.

 

 

그러나 위 화면을 보면 코드 바이트는 표시되지 않고 있습니다.

코드 바이트를 보고 싶다면 위 화면 왼쪽 상단의 “Viewing Option”을 클릭합니다.

 

 

위와 같이 옵션을 선택할 수 있습니다. 이 중 “Show code bytes”를 선택합니다.

그러면 아래와 같이 코드 바이트가 표시됩니다.

 

 

참고

http://d.hatena.ne.jp/kkamegawa/20100130/p1

 

저작자 표시
신고
by 흥배 2010.10.11 09:00


KGC10 - Visual C++10과 디버깅
View more presentations from jacking.



오늘 101호실에서 5시에 강연을 했습니다. 그런데 강연을 매끄럽게 하지 못해서 참석하신 분들에게 죄송스럽네요. 대부분 Demo 위주로 할 예정이라고 너무 쉽게 생각하고 연습을 제대로 하지 않아서 시간 관리도 제대로 못했고 말 연결도 매끄럽지 못했습니다. 반성하겠습니다.

 

오늘 제대로 못한 부분은 너무 뒷북 치는 것 같지만 블로그를 통해서 전달하도록 하겠습니다. 다음에는 연습 많이 하겠습니다. 그리고 주제도 좀 더 흥미로운 것으로 하겠습니다. 이번 강연은 내용이 많이 평이했던 것 같네요. 오히려 회사에서 사용하고 있는 유닛테스트나 자동테스트, 덤프 파일 관리 등을 이야기 하는 것이 더 좋았지 않았을까 생각합니다.

 

앞서 이야기 했듯이 오늘 다 못한 이야기는 블로그를 통해서 꼭 전달하겠습니다.


오늘 강연에서 사용했던 Demo 소스 파일도 첨부합니다. 참고로 Demo_08이 google-breakpad를 사용한 프로젝트인데 Demo_08를 빌드하기 위해서는 google-breakpad를 설치후 Demo_08의 솔루션 속성 정보에서 헤더파일과 라이브러리 설정을 수정해야합니다.



[ PT 문서의 오타 ]

문서는 컴파일이나 디버깅 할 수 없어서 버그를 잡지 못했습니다. -_-;;

1. strcpy같은 보안성이 약한 함수를 매크로로 일괄적으로 보안성 높은 함수로 바꾸어주는 매크로의 이름에 오타가 있습니다.

_CRT_SECURE_CPP_OVERLOAD_STANDAD_NAMES    (X)

_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES  (0)

그리고 이 매크로는 동적버퍼의 경우는 위험할 수가 있다고 하네요. 관련 MSDN 글이 한글은 없으니 제가 조만간 따로 번역해서 올리겠습니다.

저작자 표시
신고
by 흥배 2010.09.15 23:26
4월15일에 있었던 세미나에서 강연했던 문서입니다.


Vs2010을 활용한 cpp_병렬_프로그래밍
View more presentations from jacking.

저작자 표시
신고
by 흥배 2010.08.22 15:27

VS2010 팀 블로그에서 강좌 연재 중인 Concurrency Runtime AAL의 강좌가 끝났습니다.

강좌를 연재한 분은 멈비님으로 짧은 시간에 열심히 활동하셨습니다. 그리고 이후에도 계속 Concurrency Runtime에 대한 강좌 글을 올려 주실 예정입니다.

 

병렬 프로그래밍에 관심 있는 분들은 아래의 글을 읽어보시기 바랍니다.

 

Asynchronous Agents Library 소개

Asynchronous Agents Library - agent. 1 ( 상태 )

Asynchronous Agents Library – agent. 2 ( 기능 )

Asynchronous Agents Library - message 전달 함수. 1 ( 전송 )

Asynchronous Agents Library – message 전달 함수. 2 ( 수신 )

Asynchronous Agents Library – message block 1. ( 인터페이스 )

Asynchronous Agents Library – message block 2. ( unbounded_buffer )

Asynchronous Agents Library – message block 3. ( overwrite_buffer & single_assignment )

Asynchronous Agents Library – message block 4. ( call )

Asynchronous Agents Library – message block 5. ( transformer )

Asynchronous Agents Library – message block 6. ( choice )

Asynchronous Agents Library – message block 7. ( join & multitype_join )

Asynchronous Agents Library – message block 8. ( timer )



저작자 표시
신고
by 흥배 2010.08.16 09:00

영문판 VS 2010(Visual C++ 10)은 나왔고, 한글판은 61일에 나온다고 합니다.

 

Visual C++ 10을 도입하려고 하시는 분들은 전체적으로 어떤 변화가 있는지 알고 싶을 것이고, 특히 구매를 위해 회사 윗 분들에게 보고를 해야 되는 분들은 관련된 문서를 만들어야 하는 분들도 있으리라 생각합니다.

 

VC++ 10 도입이나 내부 스터디에 사용하도록 간단하게 VC++ 10의 달라진 점을 정리하여 문서를 만들어 보았습니다.

 

이 문서는 러프하게 만들어진 문서이니 참고로 사용하여 더 좋은 문서를 만드시기를 바랍니다. 특히 윗 분들에게 보고 하기 위해서 PT문서를 만들 때는 이 문서에 왜 필요한지에 대해서 좀 더 강력한 메시지를 넣기를 바랍니다.^^







저작자 표시
신고
by 흥배 2010.05.04 08:30
| 1 2 |