- TracePoint를 활용한 디버깅 팁
Tweet
- Game Development
- 2009/03/21 00:16
- debugging, tracepoint, Visual Studio, 디버깅, 비주얼 스튜디오
-
다음과 같은 코드가 있다고 해보죠:
이 함수가 매 틱마다 실행됩니다. 스프라이트가 이상한 곳에 그려져서, 어떤 SPRITE_POS_X 와 SPRITE_POS_Y 값에서 원하는대로 그려지는지 조사해보고 싶다고 합시다. 가장 간편한 방법은 거기에 breakpoint를 잡고 Quick Watch나 Watch 창을 통해 두 값을 수정해보는 겁니다. 이제 코드가 다음과 같다고 해보죠:
이전 예에서와 같이 iPosX 와 iPosY 값을 수정하면, 단일 틱에서만 변경이 이루어집니다. 원하는 바가 아니죠.
다행히, 매 틱마다 자동으로 이 값을 원하는 수치로 바꿀 방법이 있습니다. 값을 바꿀 때마다 재컴파일할 필요가 없습니다.
TracePoint를 DrawNiceSprite(iPosX, iPosY); 줄에 다음과 같이 설정하는 겁니다:
중괄호 안 표현식의 결과값이 출력창에 표시됩니다. 핵심은 그 표현식이 실제 수행이 된다는 것이죠. 그러면서 iPosX 와 iPosY 값을 매번 tracepoint가 hit 날 때마다 수정하게 되는 것이죠.
예전에 비슷한 짓을 조건부 breakpoint의 조건식에서 시도해본 적이 있는데, 실패였습니다. 하지만 tracepoint에서는 동작하는군요. 조건식 및 hit count 필터와 결합하면 매우 강력한 도구가 될 수 있습니다. 또한, 리턴 값이 있는 경우라면, 함수도 이런 식으로 수행할 수 있음에 주목해주세요.
물론, 이 놈도 단점이 있는데, tracepoint가 성능을 많이 잡아먹는다는 겁니다. 어떤 표현식을 안에 집어넣느냐에 따라, 매우 느려질 수도 있습니다. Hit count가 특정 배수일 때만 수행되도록 하는 식으로 부하늘 좀 줄일 수도 있습니다만, 예로 든 경우처럼 그러면 의미가 없어질 수도 있습니다.
이 함수가 매 틱마다 실행됩니다. 스프라이트가 이상한 곳에 그려져서, 어떤 SPRITE_POS_X 와 SPRITE_POS_Y 값에서 원하는대로 그려지는지 조사해보고 싶다고 합시다. 가장 간편한 방법은 거기에 breakpoint를 잡고 Quick Watch나 Watch 창을 통해 두 값을 수정해보는 겁니다. 이제 코드가 다음과 같다고 해보죠:
이전 예에서와 같이 iPosX 와 iPosY 값을 수정하면, 단일 틱에서만 변경이 이루어집니다. 원하는 바가 아니죠.
다행히, 매 틱마다 자동으로 이 값을 원하는 수치로 바꿀 방법이 있습니다. 값을 바꿀 때마다 재컴파일할 필요가 없습니다.
TracePoint를 DrawNiceSprite(iPosX, iPosY); 줄에 다음과 같이 설정하는 겁니다:
중괄호 안 표현식의 결과값이 출력창에 표시됩니다. 핵심은 그 표현식이 실제 수행이 된다는 것이죠. 그러면서 iPosX 와 iPosY 값을 매번 tracepoint가 hit 날 때마다 수정하게 되는 것이죠.
예전에 비슷한 짓을 조건부 breakpoint의 조건식에서 시도해본 적이 있는데, 실패였습니다. 하지만 tracepoint에서는 동작하는군요. 조건식 및 hit count 필터와 결합하면 매우 강력한 도구가 될 수 있습니다. 또한, 리턴 값이 있는 경우라면, 함수도 이런 식으로 수행할 수 있음에 주목해주세요.
물론, 이 놈도 단점이 있는데, tracepoint가 성능을 많이 잡아먹는다는 겁니다. 어떤 표현식을 안에 집어넣느냐에 따라, 매우 느려질 수도 있습니다. Hit count가 특정 배수일 때만 수행되도록 하는 식으로 부하늘 좀 줄일 수도 있습니다만, 예로 든 경우처럼 그러면 의미가 없어질 수도 있습니다.
'Game Development' 카테고리의 다른 글
| 매크로로 인텔리센스 길들이기 (2) | 2009/03/25 |
|---|---|
| GDC에서 공개될 CryENGINE3 (0) | 2009/03/24 |
| TracePoint를 활용한 디버깅 팁 (0) | 2009/03/21 |
| [해외 개발자 인터뷰] Daniel Rizea (0) | 2009/03/18 |
| 개발 관련 랜덤 웹링크 20090309 (0) | 2009/03/10 |
| 개발 관련 랜덤 웹링크 20090226 (0) | 2009/02/26 |











Recent comment