kyuseo의 게임 프로그래밍

TRACE, Trace 를 믿지 마세요. (정확하지 않은 오류) 본문

C++ 개발

TRACE, Trace 를 믿지 마세요. (정확하지 않은 오류)

kyuseo 2008. 1. 7. 20:15

개요..

 

1000개의 빠른 TRACE 를 호출 할 경우 1000개 모두 디버그 창에 출력되리라고 믿지 마세요.

 

버퍼에 초과된 TRACE 는 출력되지 않습니다.

 

 

해결책

 

1. TRACE를 아래와 같은 빠른 반복구문에서는 사용하지 않는다.

2. 사용하더라도 100% 신뢰하지 않는다.

3. 정말 정확한 정보를 알고 싶다면 디버그 구문을 파일로 출력한다.

4. Sleep() 을 이용하여 느리게 출력한다.

 

 

코드

 

    for( int i=0; i<1000; i++ )

    {

        static int nTrace = 0;

        TRACE( "%s:%d nTrace = %d %d\n", __FILE__, __LINE__, nTrace++, i );

    }

    

 

디버그창 :

   

D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 0 0
D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 1 1
D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 2 2
D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 3 3
........

........

........

   

D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 391 391
D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 392 392
D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 393 393
D:\RapidEngine\RapidGui\sample\r_gui_wnd\MainFrm.cpp:282 nTrace = 394 394
<-------- 394에서 끝남

  

 

 

보너스 정보

 

멀티 스레드( Multi Thread) 프로그램에서는 TRACE 와 static의 조합을 매우 주의해서 해야 합니다. 특정상황에서 다운된 경험이 있습니다.