Debug 용 함수




 대학교 4년동안 Visual Studio를 사용하면서 왜 디버그에 대한 관심이 없었을까?
printf() 를 너무 사랑했었고, Windows 프로그래밍으로 넘어오면서 CString과 AfxMessageBox()를
첩으로 두었다... 이제 학교생활은 끝났다. 디버그에대해 관심을 갖자.

                - TRACE
                - ASSERT
                - AfxDebugBreak()
                - VERYFY
                - ::afxDump

* 디버그용 매크로들은 "_DEBUG" 가 정의 되어 있어야 한다.
* 디버그 모드로 빌드하면 자동으로 "_DEBUG" 가 정의 된다.
* 릴리즈 모드로 컴파일시 빠짐.


1. TRACE
   - 디버거의 Output Window 에 출력
   - ATLTRACE : ATL 매크로도 동일 동작
   - TRACE0(),TRACE1(), TRACE2(), ...  참조
   - 예 
                int x = 1;
                int y = 16;
                float z = 32.0;
                TRACE( "This is a TRACE statement\n" );
                TRACE( "The value of x is %d\n", x );
                TRACE( "x = %d and y = %d\n", x, y );
                TRACE( "x = %d and y = %x and z = %f\n", x, y, z );
  

사용자 삽입 이미지

   - 기본적으로 printf()와 비슷한 형식을 취하기 때문에 CString 객체는 출력할 수 없음  
   - TRACE() 사용시 주의 사항
      a. 여러 변수 값을 찍을 경우




2. ASERT
   - 인자의 논리값이 false인 경우 다이얼로그 창을 띄우며 프로그램을 멈춤
   - "재시도" 선택 시 디버거 실행 : AfxDebugBreak() 호출
   - 코드 예
                bool bRet = false;
                ASSERT(bRet);
 
사용자 삽입 이미지



3. AfxDebugBreak()
   - 매크로가 아니라 함수 이다.
   - hard-coding breakpoint 라고 함.
   - Visual Studio 에서 F9를 눌러 breakpoint를 넣는게 아니라,
     코드 안에서 직접 '_asm int 3' 하고 breakpoint를 넣은 것.
   - 실제로 F9 로 breakpoint를 설정하면 해당 위치의 코드 첫 Byte를 그 코드로 대체시킴.




4. VERIFY
   - 인수의 결과가 참인지 거짓인지에 따라 프로그램을 종료 할지 계속 수행할지
    판별해 주는 매크로 이다.

   - 인수의 표현식에는 0, 또는 0이 아닌 수를 리턴하는 판별식이 들어가야 한다.
   - 0이 아닌 리턴값을 갖으면 VERIFY() 매크로는 아무것도 하지 않는다.
   - 0 리턴값을 갖으면 에러 메시지 출력후 프로그램을 중단 한다.




5. ::afxDump
 - C++ 의 cout 처럼 사용할 수 있다.
 - 사용 예

CString str;
str.Format(_T("afxDump"));
::afxDump << str << "\n";





@

Posted by six605
,