디버그

내위키
Dennis (토론 | 기여)님의 2022년 2월 1일 (화) 23:57 판

Debug.

컴퓨터 프로그램에 숨어 있는 각종 오류, 즉 버그를 찾아서 바로잡는 것. 디버그를 위해 사용하는 소프트웨어를 디버거(debugger)라고 한다. 컴퓨터 프로그래밍은 사람이 하는 일이라 버그가 하나도 없는 소프트웨어는 제로에 가깝다. 버그가 없는 아름다운 프로그램으로 유명한 TeX도 2022년 초 기준으로 버전 3.141592653인데, 버전 3이 나온 이후로 버그가 발견되어 고치면 소숫점 뒤의 숫자들이 하나씩 추가된다.[1] 즉, 이 프로그램조차도 버그가 없다기보다는 '거의 없다'에 가깝다.

하나의 완성된 소프트웨어를 만들기 위해 개발자들은 코딩에 쓰는 시간보다 디버그에 쓰는 시간이 더 많다. 누구는 코딩 시간 대비 디버깅 시간이 3대 7이라고도 하고 누구는 2대 8이라고도 한다. 그만큼 디버그가 개발자의 시간과 노력을 많이 잡아먹기 때문에 프로그래밍 언어와 개발환경은 어떻게 하면 잠재된 버그의 가능성을 줄이고, 개발자가 더 빠르게 버그를 찾아낼 수 있을지, 버그가 있더라도 어떻게 하면 그에 따른 오류의 규모와 피해를 최소화할지에 많은 신경을 쓰고 있다.

디버그를 위한 개발자의 노력은 마치 요리조리 도망다니는 범인을 쫓아다니는 형사와도 비슷하다. 문법 오류 같은 거야 요즈음은 개발 환경에서 바로바로 잡아주기 때문에 별로 문제가 안 되지만 진짜 시간과 노력을 잡아먹는 건 실행은 멀쩡히 되는데 원하는 결과가 나오지 않거나 실행 도중에 런타임 오류가 터질 때다. 다행히 현대의 개발 트렌드는 모듈화, 객체지향, 의존성 감소와 같은 기법을 통해 버그의 원인을 더 빨리 찾아내는 데에 도움을 주고 있지만 여전히 도대체 어디서부터 문제가 생겼는지 그 실마리를 한동안 찾지 못해서 헤멜 때도 부지기수다.

디버거는 코드를 한 줄씩 실행시키거나, 특정 지점까지 프로그램 실행이 왔을 때 일시정지하는 기능이 있으며, 특정 실행시점에서 변수의 값을 확인할 수 있는 기능을 가지고 있다. 디버거마다 그밖에 다른 추가 기능들이 있지만 일단 이 세 가지가 디버거라면 공통으로 가지고 있으며 가장 많이 쓰이는 기능이다.

  • 먼저 버그가 의심스러운 부분에 실행 중지점(breakpoint)을 설정해 놓고, 개발환경에서 디버그 모드로 프로그램을 실행시킨다.
  • 각 변수의 값이 어떻게 되어 있는지, 즉 원하는 값을 가지고 있는지를 살펴본다.
  • 문제가 없다면 한 줄씩 실행시켜 본다. 만약 함수나 메서드를 호출하는 줄이라면 그 함수 안으로 들어가서 한 줄씩 실행시키는 step in 실행을 하거나, 함수는 통으로 실행시키고 결과를 받아와서 다음 줄로 넘어가는 step ovrer 실행을 시킬 수 있다. 어떤 함수 안이라면 그 함수의 나머지 코드를 모두 실행시키고 함수를 호출했던 코드의 다음 줄에서 정지하는 step out 실행도 가능하다.

각주

  1. 딱 보면 알겠지만, 원주율 숫자다.