ReleaseCapture, SetCapture, GetCapture 메소드들은 마우스 이벤트를 헨들링하기 위해 사용된다.


설명하자면, 평상시에는 마우스포인트가 움직일때, 그 포인트 밑에 있는 컨트롤들이 메시지를 받아서 처리하게 되는데, SetCapture 로 특정컨트롤을 지정하면, 마우스의 메시지가(클릭,이동등등..) 그 컨트롤에 보내지게 된다. 즉, 마우스 포인터가 컨트롤의 Front에 존재하지 않아도 컨트롤은 메시지를 받아 특정한 임무를 할 수 있다.

많이 쓰이는 곳은 드래그 하여 영역을 지정하고 싶을때, 또는 마우스 드래그등을 할 때 등.., 런타임 컨트롤 마우스 이동등의...기능들...

GetCapture 는 지금 마우스메시지를 받아 처리할 수 있는 컨트롤의 헨들값을 받아오는 것

ReleaseCapture 는 메시지 제어권을 풀어주겠다는 것.


 


WRITTEN BY
정현석
이것저것 끄적끄적....

,
현재 나는 WindowMobile환경에서 Dll를 로드하여 디버깅을 하려고 한다...

생성된 dll에 대한 소스를 가지고 있는지라 그냥 Breakpoint를 찍으면 될 줄 알았것만....

그게 아니였다... 아침에 중국지사에서 소스를 받아서 이것때문에... 이걸 몰라서...

2시간이나 허비하다니..... 방법은 아주 간단했다...

그건 바로.....

dll를 만드는 프로젝트의 속성에서 구성속성 -> c/c++ -> 일반 에 보면 디버깅 정보 형식이라고 있다...
이놈을 프로그램 데이터베이스(/Zi)로 설정해주면 되는것이였다. 우리가 파일중에 볼수있던
.pdb라는 것이였다... 이 정보가 있어야 디버깅이 가능한것이였다.... ㅠ_ㅠ 다음에는 시간날리지 말자

WRITTEN BY
정현석
이것저것 끄적끄적....

,

개요..

닥터왓슨 (Dr. Watson, Drwtsn32.exe) 은 디버그(Debug)와 릴리즈(Release)버전에서 프로그램 오류발생 할 경우 오류 내용을 해독할 수 있는 정보를 제공해주는 특히 서버프로그램에서 아주 유용하게 사용됩니다.

"drwtsn32.exe" 실행하여 도움말을 클릭하면 자세한 한글 설명서를 볼 수 있습니다.


 

오류가 발생하는 테스트 프로그램 다운로드

윈도우 디버그 심볼(Debug Symbol) 다운로드 받는 방법

 

따라해보기

내가 만든 프로그램의 심볼을 닥터왓슨(Dr. Watson)에 등록시켜보기

1. 내 컴퓨터 등록정보->고급->환경변수 에  _NT_SYMBOL_PATH 등록합니다.

 

2. 변수값에 %systemroot%\Symbol;D:\Symbol; 추가합니다.

3. 닥터왓슨을 다음과 같이 실행시켜 기본 디버거로 등록합니다.

 drwtsn32.exe -i

4. 릴리즈버전의 링크옵션에 "Generate debug info"를 체크합니다.

5. 컴파일 하여 생성된 *.pdb 파일을 심볼 폴더로 복사합니다.  

6. 릴리즈버전을 실행시켜 오류 발생 시험합니다.  

오류가 발생 후  오류 함수와 내용이 무엇인지 알아보기 

drwtsn32.log 파일 일부분

응용 프로그램 예외 발생:

응용 프로그램: (pid=1224)

날짜: 2004-05-21 @ 23:30:20.968

예외 번호: c0000005 (액세스 위반)

 

함수: fnc_1

00401005 b9e8030000 mov ecx,0x3e8

0040100a 33ff xor edi,edi

오류 -> 0040100c f3ab rep stosd es:00000000=????????

0040100e 5f pop edi

 

*----> 스택 역 추적 <----*

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name

0012FF74 0040101A 000003E8 00401025 004010E4 00000001 !fnc_1 (FPO: [1,0,1])

0012FF7C 00401025 004010E4 00000001 00340C20 00340C58 !fnc_2 (FPO: [0,0,0])

0012FF80 004010E4 00000001 00340C20 00340C58 00000000 !main (FPO: [2,0,0])

0012FFC0 77E61AF6 00000000 00000000 7FFDF000 C0000005 !mainCRTStartup

0012FFF0 00000000 00401030 00000000 000000C8 00000100 kernel32!OpenEventA

  

Visual C++ 를 기본 디버거로 다시 등록하는 레지스트리

 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug]

"Auto"="0"

"Debugger"="\"E:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin\\msdev.exe\" -p %ld -e %ld"

"UserDebuggerHotKey"=dword:00000000

 



WRITTEN BY
정현석
이것저것 끄적끄적....

,

VC에서는 Warning의 Number만으로도 warning이 안나오도록 할 수 있다.

사실 이게 필요한건 아니다 arm build시에도 warning이 안나오도록 하고 싶은데

요건 모르겠다 지길...

사용법은

#pragma warning(disable: 고유번호 ) 이다. 보다싶이 링크 ㅋㅋ 궁금하면 들어가봐!!


WRITTEN BY
정현석
이것저것 끄적끄적....

,

Warning....

언어/C&C++ 2008. 6. 18. 14:55

----- Warning ---------------------------------------------------------

★ 'XXXXXXXX' declared but never used
자동 변수를 선언해 놓았지만 한번도 사용하지 않았다. 이 메시지는 자동변수를
선언한 함수의 끝에서 발생한다.

★ 'XXXXXXXX' is assigned a value which is never used
자동 변수를 선언해 놓고 어떤 값을 대입시키기는 했지만 한번도 사용(참조)하지
않았다.

★ 'XXXXXXXX' not part of structure
구조체의 멤버 연산자인 . 이나 ->의 오른쪽 피 연산자가 구조체의 멤버가 아니다.

★ Ambiguous operators need parentheses
쉬프트 연산자. 비트 연산자, 관계 연산자가 괄호 없이 사용될 때 이 경고가
발생한다.

★ Both return and return of a value used
한 함수에서 여러번 return문이 있을 때 각각이 되돌리는 값의 형(type)이 서로
같지 않다.

★ Call to function with no prototype
함수의 선언이 없이 함수를 사용했다.

★ Call to function 'XXXX' with no prototype
함수 'XXXX'를 선언 없이 사용했다.

★ Code has no effect
아무런 효과가 없는 수식을 사용했다. 예를 들어 a+b;라는 수식은 에러를 발생
시키지는 않지만 아무일도 하지 않게 되고 이 경고를 발생시킨다.

★ Constant is long
32767보다 큰 10진 상수나 65535보다 큰 8진수 또는 16진수를 뒤에 1이나 L을
붙이지 않고 사용했다. 이 때 사용한 상수는 long형으로 처리된다.

★ Constant out of range in comparison
관계연산자의 양변을 비교할 때 양변의 값이 비교 가능한 범위를 벗어났다.
서로 다른형의 데이터를 비교할 때는 두 값이 같은 허용범위 안에 있어야 한다.
예를 들면, unsigned형과 int형의 데이터를 비교 하려면 둘다 0에서 32767사이의
값을 가지고 있어야 한다. 또, unsigned형과 -1이라는 값과의 비교는
무의미함으로 주의해야 한다.

★ conversion may lose significant digits
unsigned long형이나 long형의 데이터가 int형의 데이터로 변환될 때 이 경고가
발생한다. 변환 전의 값이 int형 범위 안에 속해 있으면 별문제가 없자만,
int형의 범위를 벗어나는 값은 데이터의 앞의 두 바이트가 없어져 버리므로
주의해야 한다.

★ Function should return a value
void형이 아닌 함수인데 되돌림 값을 되돌리지 않았다.

★ Hexadecimal or octal constant too large
문자상수나 문자열 상수내에서 사용한 16진 또는 8진 확장열의 값이
1바이트를 넘어섰을 때 발생한다.

★ Mixing pointers to signed and unsigned char
signed char와 unsigned char간의 변환이 일어날 때 발생한다. 이 경고는
실행에 어떤 해도 주지 않는다.

★ No declaration for function 'XXXXXXXX'
함수를 호출하기 전에 그 함수가 선언이나 정의가 미리 되어있지 않으면 발생한다.

★ Non-portable pointer assignment
캐스트 연산자의 사용을 하지 않고 포인터와 포인터가 아닌 것을 서로
대입 시키려 했다.

★ Non-portable pointer comparison
캐스트 연산자의 사용을 하지 않고 포인터와 포인터가 아닌 것을 서로 비교
하려 했다.

★ Non-portable pointer conversion
함수형이 포인터 형인데 포인터가 아닌 값을 되돌리려고 했거나 그 반대의 일을
시도 했다. 캐스트 연산자를 사용하면 이 경고를 막을 수 있다.

★ Parameter 'XXXXXXXX' is never used
함수의 매개변수를 함수내에서 한번도 사용하지 않았다.


★ Possible use of 'XXXXXXXX' before definition
자동변수를 초기화시키지 않은 채로 사용하였다.


★ Possibly incorrect assignment
if, while, do-while문의 조건식에서 대입 연산자를 사용하였다.
보통 ==를 =로 잘못 사용한데서 비롯되지만 대입 연산자를 사용하여야 할
경우에는 다음과 같이 한다.
(예) if(ch = getch()) ...

if((ch=getch()) != 0) ...

★ Redefinition of 'XXXXXXXX' is not identical
매크로 정의를 한 후에 또다시 재정의를 하는데 그 값이 이전에 정의한 값과
다르다. 다른 값으로 정의 해야할 필요가 있으면 #undef문을 사용하여 매크로
정의를 취소한 후에 다시 정의해야 한다.

★ Restarting compile using assembly
tcc를 이용하여 컴파일할 때 소스 파일내에 asm(인라인 어셈브리)이
사용되었으면 어셈블러로 다시 컴파일한다는 경고를 낸다.

★ Structure passed by value
구조체를 몽땅 함수로 넘겨 주었다. 프로그램의 실행에는 전혀 무해하지만,
보통 구조체의 데이터는 구조체 포인터를 사용하여 전달해 주는 것이
바람직하다.

★ Superfluous & with function or array
함수명은 그 자체가 함수를 가리키는 번지값을 가지고 있는데, 필요없는
번지연산자(&)를 함수명에 사용하였다.

★ Suspicious pointer conversion
다른 형을 가리키는 포인터끼리의 형변환이 일어났다. 변환이 정당할 경우에는
캐스트 연산자를 사용하여 이 경고를 없앨 수 있다.
그렇지 않을 경우에는 이 경고 메시지를 발생 시킨부분을 확실히 고쳐야 하며,
그대로 방치하거나 캐스트 연산자 남용의 경우에는 무지무지 심각한 버그를
유발할 수 있다.

★ Undefined structure 'XXXXXXXX'
정의되지 않은 구조체 택을 사용하였다.
보통 구조체 택의 철자 오류에서 나타난다.

★ Unknown assembler instuction
인라인 어셈블리에 허용되지 않는 어셈블리 코드가 들어가 있다.

★ Unreachable code
프로그램 중에 제어가 도달하디 낳는 부분이 있다. 즉 한번도 실행되지 않는
부분이 있다. break, continue나 goto문을 잘못 하용했거나,if나 while문
등에서 조건식이 무한루프가 되어 버렸거나 할 경우에 발생한다.

★ void functions may not return a value
void형 함수는 아무 값도 되돌릴 수 없는데 return문이 어떠한 값을
되돌리려 했다.

★ Zero length structure
크기가 0인 구조체를 정의해 놓았다.


WRITTEN BY
정현석
이것저것 끄적끄적....

,