대부분의 사람들은 MS 비쥬얼씨 디버거를 사용할때, 보통의 '정지지점(Location breakpoint)'을 사용하는 방법에 대해서는 알고 있다. 정지지점 디버거는 코드의 특정 라인에 정지지점을 설정해놓고 프로그램이 실행시 그 줄을 지나가게 되면 디버거가 미리 지정한 조건을 판단해서 멈출지 여부를 판단하게 된다.
정지지점 방식의 문제점은 실제 문제점이 발생하는 곳이 꼭 그 정지지점이 아닌 경우가 많다는 것이다. 그런 경우에는 '정지시점(When Breakpoint)'을 사용하는 것이 좋다. 정지시점은 프로그램 문장으로 이루어져 있다가, 그것이 바뀌거나 참이 되거나 하면 디버거를 호출시켜서 어디서 그렇게 되었는지를 보여주는 기능을 한다.

그러면, 예를 들어서 지금 프로그램에 Var1 이라는 정수가 원래 235 라는 값을 가지고 있어야 하는데, 메모리 오버플로우 관련 문제 때문에 엉뚱한 값으로 바뀌는 문제점이 있다고 가정해보자. 보통 이런 경우에는 어디에서 메모리 오버플로우를 일으키는지 알 수가 없기 때문에 '정지시점'을 설정해야 한다. 정지시점이 변경되거나 지정한 조건이 참이되면 디버거가 떠서 메모리 오버플로우를 야기시킨 문장이 어딘지 정확히 지적해주는 것이다.

이제 정지시점을 설정하는 방법을 알아보도록 하자. MSVC 에서 Edit->Breakpoint 로 간 다음에 Data 탭으로 바꾸면 그곳에 조건문을 지정할 수 있게 되어있다. 예를 들면 Var1 이라고 써놓으면, Var1 이 바뀔때마다 디버거가 가동되는 것이고, Var1 != 235 라고 써 놓으면 Var1 이 235 가 아니게 될때 디버거가 가동된다. 다이얼로그 박스의 오른쪽에 있는 화살표를 클릭해서 이 정지시점의 영역을 세트할 수도 있다.

이 방법을 이용해서 다른 고급 breakpoint 들도 모두 설정이 가능하다. 더 자세한 설명을 보고 싶으면 MSVC 에서 "when breakpoints" 라는 단어로 검색을 하면 된다.

나는 이 기능들을 아주 자주 쓰는 것은 아니지만 이 기능덕분에 목숨을 건진(--;;) 적이 두번이나 있다. 이제부터는 버그를 박멸하는 것이 좀 더 쉬워질 것이다.

Issac Vanier가 2003 년 4 월 22 일 작성함

imcgames 의 김학규입니다