TracePoint를 활용한 디버깅 팁

다음과 같은 코드가 있다고 해보죠:



이  함수가 매 틱마다 실행됩니다. 스프라이트가 이상한 곳에 그려져서, 어떤 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가 특정 배수일 때만 수행되도록 하는 식으로 부하늘 좀 줄일 수도 있습니다만, 예로 든 경우처럼 그러면 의미가 없어질 수도 있습니다.
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0

top