전자기술

크로스 개발 환경용 디버거

티가세 2007. 10. 22. 19:17

3.크로스 개발 환경용 디버거

 디벅(debug)이란?

소프트웨어를 작성하는데, 반드시 발생하는 것은 버그이다. 당연히 세심한 주위를 하면서 프로그래밍하여 나가는 것이 중요하지만, 인간이 개발하고 있는 이상, 프로그램의 오류는 반드시 발생한다고 생각해야 한다.
고급언어의 구문기술 오류 등은, 컴파일 단계에서 에러가 발생하므로 프로그램의 입력 오류는 곧바로 눈치챌 있다. 그러나 프로그램의 구조상의 오류 등은, 컴파일 단계에서는 에러가 발생하지 않기 때문에 프로그램의 오류는 눈치챌 수 없다. 타겟 시스템에 다운로드해도 의도했던 대로 동작하지 않는다고 하는 상황에 빠지게 되며, 어디에 문제가 있는지 곧바로 알 수 없다.
디벅이란, 이와 같은 버그를 발견하고 수정하는 작업으로, 그때에 사용하는 툴을 디버거(debugger)라고 부른다.

 디버거(debugger)의 기본 기능

일반적으로 사용되는 임베디드용 CPU는 아무리 느려도 수 MHz의 클록 주파수로 동작한다. 기계어 레벨로 1초 동안에 수만 명령은 실행해 버린다.「어? 지금 무언가 이상한 동작을 하지 않았는가?」하고 생각해도, 눈 깜짝할 순간에 실행되어 버린다. 그래서 디버거에는 명령을 1명령씩 실행하는 스텝 실행 기능이 준비되어 있다. 스텝 실행을 함으로써 프로그램이 어떠한 순번으로 실행되는지를 명확하게 알 수 있다.
또, 기동하고 나서 마지막에 실행하는 루틴을 디벅하는 경우, 모든 프로그램을 처음부터 스텝 실행해 가는 것은 시간이 너무 걸리기 때문에 어느 지점까지는 순식간에 프로그램을 실행하고, 지정한 지점에서 프로그램의 실행을 멈추고 거기서부터 스텝 실행하여 동작을 확인하는 방법도 있다. 이 어떤 지점(브레이크 포인트)에서 프로그램을 멈추는 기능을 브레이크 기능이라 부른다. 또, 브레이크 포인트를 지정하지 않고 프로그램을 실행시켜, 강제적으로 프로그램의 실행을 멈추는 기능으로서 강제 브레이크 기능도 사용된다.
프로그램의 동작 확인에서는 프로그램이 어떠한 순번으로 실행되었는지를 확인하는 것 외에, 변수가 지금 어떠한 값을 유지하고 있는지를 확인하는 경우도 있다. 강제 브레이크 등으로 프로그램의 실행을 멈추고 값을 확인하려는 변수를 지정하면 그 값을 표시하는 기능을 워치 기능이라 부른다. 그래피컬 유저 인터페이스(GUI) 대응의 디버거에서는 커서를 변수 부분에 가지고 가면 윈도우 등으로 변수의 내용이 표시되는 것도 있다. 게다가 그 변수의 내용을 변경할 수도 있다.
이들의 기능은 Windows상의 어플리케이션을 작성하기 위한 디버거에서도 같은 기능을 갖고 있다. 이른바 디버거로서 가장 기본적인 기능이라 할 수 있을 것이다.

 크로스 개발 환경용 디버거

네이티브 환경에서는 작성한 프로그램을 그 환경에서 실행할 수 있다. 그러나 크로스 개발 환경에서는 작성한 프로그램은 타겟 시스템에 전송할 필요가 있다.
일반적으로, 크로스 개발용의 디버거에는 호스트와 타겟 시스템을 그림 7과 같이 어떤 통신 인터페이스로 접속하고, 그 인터페이스를 이용하여 호스트 환경에서 작성한 프로그램을 타겟 시스템에 다운로드하는 기능을 갖고 있다. 또, 디버거로서의 기본 기능으로 방금 전에 설명한 스텝 실행이나 브레이크 기능, 변수의 워치나 변경 기능 등을 실장하고 있다. 게다가, 임베디드 기기에서는 물리적인 메모리 상태나 레지스터 상태를 파악하여 보다 세부적인 동작을 체크할 수 있도록 되어 있다. 그 때문에, 메모리나 레지스터의 내용을 16진수 표시(덤프 기능)하거나 내용을 고쳐 쓰는 기능(메모리 에디트 기능) 등도 가지고 있다.