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

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

 

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

 

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

 

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







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

C++0x 관련 책 "Visual C++ 10 C++0x"가 오늘 한국 MSDN 사이트에 올라왔습니다.

e-book으로 보기를 원하는 분이나 책을 얻지 못한 분들은 다운로드 해서 보세요

 

MSDN : http://msdn.microsoft.com/ko-kr/default.aspx

 


Visual Studio의 시작 페이지에도 다운로드 링크가 표시됩니다.

 

 

그리고 책에 오타가 있습니다.

48페이지 decltype 설명에서 오타가 있습니다.




저작자 표시
신고
by 흥배 2010.04.20 13:20

견고한 프로그램을 만들기 위해서는 컴파일러 경고 레벨을 4(즉 최고) 해 놓아야합니다.

 

경고 레벨을 4로 해 놓은 후 자신이 만든 코드에서는 최대한 경고가 나오지 않도록 코드를 잘 정리합니다.

 

그런데 본인의 코드나 다른 누군가가 만든 라이브러리에서 에러나 문제가 될 정도는 아니지만    경고가 발생하는 경우가 있습니다(예를 들면 함수의 파라미터를 사용하지 않은 경우 등).

이 경고가 다행히 문제를 일으키는 것은 아니지만 컴파일 할 때마다 출력되므로 무척 보기 좋지 않고, 본인이 실제 작업하다가 만든 경고(특히 위험성 높은 경고)도 불 필요한 경고들 때문에 못 볼 수도 있습니다.

 

이렇게 불 필요한 경고를 없을 때는 #pragma 지시자를 사용하면 해결 할 수 있습니다.

만약 DebugTrace.h 라는 파일을 include 하고 있는데 여기서 불 필요한 경고를 발생하고 있다면 include 하는 부분에서 아래와 같이 #pragma를 사용합니다.

 

// 4100 경고 무시

#pragma warning( push )

#pragma warning( disable : 4100 )

           #include "DebugTrace.h"

#pragma warning( pop )

저작자 표시
신고
by 흥배 2010.02.23 08:30



위와 같이 디버깅 할 때 포인터 배열 p을 내용을 보고 싶을 때 Watch window Quickwatch window를 통해서 p를 보면 배열의 첫 번째 값만 보입니다.

 


1. p의 모든 값을 보고 싶을 때는 ‘변수, 배열 크기’Watch window에 입력합니다.

 

 

 

 

2. 특정 위치의 값만 보고 싶다면 '(변수 + 인덱스)'

 

 


 

Visual C++ 6 ~ 10까지 다 가능합니다.


출처 : http://support.microsoft.com/?scid=kb%3Ben-us%3B198953&x=8&y=16

 

저작자 표시
신고
by 흥배 2010.02.11 08:30
1. 간단 사용 법

int sum=0

std:;vector<int> v;

for each( int i in v )

{

        sum += i;

}



std::map<string, int> con;

for each( std::pair<string, int> tmp in con )

{

        ........

}






2. for each의 파라미터를 참조로 사용할 때

std::vector<Object> objs;
...

 

1. for each(const Object& o in objs) // 가능

2. for each(Object& o in objs)        // 불가

 


이것은 std::vector에 의한 제한임. Objs가 배열이라면 2도 가능하다고 함.

 

출처 : http://www.tkzdev.net/?p=183


저작자 표시
신고
by 흥배 2010.01.06 06:30

32비트 OS에서는 구조체는 4바이트 정렬을 하고, 64비트 OS에서는 8바이트 정렬을 합니다.


네트웍 통신으로 구조체의 데이터를 보낼 때는 구조체의 각 멤버를 하나씩 배열에 인코딩 하던가, 또는 progma pack(1)을 사용하여 1바이트 정렬된 구조체를 보냅니다.


VC++ 프로젝트의 설정을 자세히 보지 않아서 그 동안 구조체 정렬은 progma pack(1)만 사용했는데 VC++의 프로젝트 설정에서도 정할 수 있다는 것을 근래에 알았습니다.


다만 VC++ 프로젝트 설정에서 정하면 모든 구조체에 다 적용 되어버리므로 실제 사용할 일은 없을 것 같습니다.



출처 : 네이버 ‘온라인서버제작자모임’의 규야님으로부터

신고
by 흥배 2010.01.04 08:30


Windows Server 2003 이후의 OS에서는 애플리케이션이 DLL 128개 이상 로드를 못한다는 것을 아시나요? 전 근래에 우연찮게 트위터의 글을 보다가 알았습니다.

이 때까지 만든 애플리케이션이 128개 이상의 DLL을 로드한 적인 없으니 알도리가 없었죠^^

아래의 글은 128개 이상 DLL을 로드하여 실패가 발생했을 때 해결하는 방법입니다.

 

 

Visual C++ .NET 2003, Visual C++ 2005, 또는 Visual C++ 2008에서 빌드 된 애플리케이션에 128개 이상의 DLL이 포함되는 경우 Windows Server 2003 이후의 OS에서 로드 실패가 발생

 

현상

Microsoft Visual C++ .NET 2003, Microsoft Visual C++ 2005, 또는 Microsoft Visual C++ 2008에서 빌드된 애플리케이션이 128개 이상의 DLL을 로드한 경우 LoadLibrary 함수가 실패한다.

 
이 현상은 Fiber Local Storage(이하 FLS)을 지원했던 Microsoft Windows Server 2003 이후의 OS에서 발생할 가능성이 있다.

 
이 문제가 발생했을 때에 GetLastError 함수에서 얻은 자세한 에러 코드는 다음과 같닫.

 1114 : ERROR_DLL_INIT_FAILED (동적 링크 라이브러리(DLL) 초기화 루틴 실행에 실패했습니다.)

 

 

원인

1 프로세스 마다 FLS의 최대 값은 128이기 때문에 129 이상의 FLS 할당을 하면 이 현상이 발생합니다.

FLS
를 지원하지 않은 OS에서는 Thread Local Storage(이하 TLS)를 사용합니다. Microsoft Windows 2000 이후의 TLS의 최대 값은 1088입니다. FLS은 통상 Fiber 내에 국소적으로 값을 보존하기 위해 사용되어 Thread 보다도 가볍게 처리하므로 TLS 보다도 적은 용량이 설정되어 있습니다.

 

 

회피 방법

애플리케이션에 사용하는 DLL Visual C++ 컴파일 옵션으로 /MT 옵션을 사용하고 있는 경우는 /MD 옵션으로 변경하여 빌드 합니다.

/MT 옵션에서 정적으로 C 런타임 라이브러리를 사용한 경우 각각 모듈마다 C 런타임 라이브러리의 인스턴스가 존재하기 때문에 DLL의 수와 같은 수의 FLS가 할당 됩니다.

 

/MD 옵션으로 동적으로 C 런타임 라이브러리를 사용하는 것에 의해 같은 버전의 C 런타임 라이브러리의 인스턴스가 하나가 되어 FLS DLL의 수에 관계 없이 하나가 할당됩니다.

 

컴파일 옵션의 변경 순서는 다음과 같습니다.

  1. Visual C++ .NET 2003, Visual C++ 2005 또는 Visual C++ 2008의 솔루션 탐색기에서 프로젝트를 연다.
  2. 프로젝트의 [속성 페이지] 다이얼로그 박스를 연다.
  3. [C/C++] 폴더를 클릭한다.
  4. [코드 생성] 속성 페이지를 클릭한다.
  5. [런타임 라이브러리] 속성을 [멀티 스레드 DLL (/MD)] 로 변경한다.

 

 

출처 : http://support.microsoft.com/kb/969933/ja

 

 

저작자 표시
신고
by 흥배 2009.12.30 09:00
| 1 2 3 4 5 |

티스토리 툴바