디버깅은 굉장히 중요한 기능 중 하나이다. 예전에 웹 프로젝트를 개인적으로 진행할 때 php나 html에서는 디버깅을 하기가 불편해서 꽤 고생했던 기억이 난다. 디버깅을 통해서 데이터가 어떤 식으로 변화하는 지 알 수 있고, 그 과정에서 예기치 못한 값을 가지는 순간을 찾아서 논리적인 오류를 해결할 수 있게 된다. 



가장 먼저 할 일은 어디에서 멈출 것인가, 중단점을 설정하는 것이다. 중단점은 해당 라인에 커서를 놓은 뒤 F5를 누르면 설정가능하다.

아래의 사진을 보면 168번 라인의 왼쪽에 빨간색 동그라미가 되어있고, 그 외에 파란색 동그라미들이 보일 것이다.



파란색 동그라미는 중단점을 설정할 수 있는 구간들이다. 예를 들어 중단점으로 설정된 줄의 두 줄 위로 가면 파란색 동그라미가 왼쪽에 없는 것을 볼 수 있는데, 이 줄은 'end else begin'으로 별다른 일이 일어나지 않고 블록이 나뉘는 구간이다. 그렇기 때문에 멈출 수가 없는 곳이 되는 것이다. 파란색 동그라미는 처음엔 나타나지 않고, 오른쪽의 Project Manager목록에서 해당 소스를 우클릭하여 Build를 하면 볼 수 있게 된다.


파란색 동그라미가 없는 상태에서도 중단점을 설정할 수는 있으며, 빌드 후에 해당 동그라미에 X자가 생긴다면 해당 중단점은 유효하지 않다는 의미로, 그 곳에서 멈추지 않게 된다. 







그리고 프로그램을 Run하게 되면, 해당 라인에서 멈추게 된다. 왼쪽을 보면 설정된 빨간 동그라미에 화살표가 표시된 것을 볼 수 있다. 현재 실행할 예정인 라인을 가리키게 된다. 현재 캡쳐된 사진 상에서 프로그램은 167라인까지 실행하였고, 이제 168라인을 실행할 것이다.




그럼 이 때, 디버깅모드에서는 특정 변수에 들어가있는 값을 확인할 수 있다.



먼저 가장 간단한 방법은 변수 위에 마우스 커서를 올리고 기다리는 것이다. 그럼 Hint처럼 해당 변수와 함께 변수에 들어있는 값을 확인할 수 있다. 사진 상에서 aSum위에 커서를 올리고 있는 상태이고, 현재 aSum안에는 0이라는 값이 들어가있는 상태이다.




또 다른 방법은 Ctrl + F7을 통해 탐색창을 열어서 변수명을 직접 입력하는 것이다. 이 방법의 장점은 변수 간의 연산도 가능하다. 예를 들어 Expression 창에 aSum이 아닌 aSum + i (딱히 의미있는 값은 아니지만) 를 입력하면 이 상태의 aSum과 i가 더해진 값이 아래 Result에 출력될 것이다.



이렇게 일일이 커서를 올리고 기다리거나 창을 띄우기가 번거롭다면 특정 변수들이 변하는 값을 실행되는 라인에 따라 계속해서 볼 수 있다.




코드의 왼쪽을 보면 Watch List라는 것이 보일 것이다. 이곳에 우클릭하여 Add Watch를 하고 원하는 변수를 입력하게 되면, 프로그램의 실행에 따라 변하는 변수의 값을 볼 수 있다.


또는 실행되는 프로시저나 함수의 지역변수의 경우 Watch List 아래의 Local Variables창에 나오므로 확인이 가능하다. 


그럼 프로그램의 실행은 어떤 식으로 진행시킬 수 있을까




위의 캡쳐에서 보이는 세 개의 아이콘 또는 단축키를 통해 가능하다.


맨 왼쪽부터 


Trace Into(F7)

Step Over(F8)

Trace To Next Source Line(Shift + F7)


이다. 


먼저 F7의 경우 라인단위로 진행시키며, 함수를 만날 경우 해당 함수의 내부로 들어가게 된다. 예를 들어 

F8의 경우 라인단위로 진행시키는 것은 동일하지만 함수를 만날 경우 내부로 들어가지 않고 그대로 진행시키게 된다.

Shift + F7의 경우 함수 내부에 들어가 있을 경우 해당 함수를 탈출하여 원래 라인으로 돌아오게된다.





즉 디버깅은 값이 변하는 것을 알고싶을 때 그것보다 몇 라인 위에서 중단점을 찍고 해당 변수가 어떻게 변하는지를 알 수 있게해준다. 디버깅이 안되는 언어에 비하면 얼마나 고마운지! 


그럼 이만

+ Recent posts