[테크월드=정환용 기자] 브레이크포인트는 가장 쉽게 사용될 수 있는 효과적인 디버깅 방법의 하나다. 일반적인 브레이크포인트의 동작은 설정한 위치의 코드가 수행되기 전 동작을 멈추는 것이다. 브레이크포인트는 동작 방식에 따라 구분할 수 있다. 플래시에 코드를 다운로드 후 코드 수행 중 사용되는 하드웨어 브레이크포인트, 코드를 RAM상에서 실행하며 사용하는 소프트웨어 브레이크포인트, 디버깅 프로브에서 지원하는 플래시 브레이크 포인트가 있다.

일반적으로 실행 코드를 플래시 메모리에 다운로드 후 동작하기 때문에 주로 하드웨어 브레이크포인트가 가장 많이 사용된다. IAR (임베디드 워크벤치)에서는 동작 방식에 따른 모든 브레이크포인트의 지원뿐 아니라 다양한 타입의 브레이크포인트를 지원하고 있다. 

 

코드 브레이크포인트 
코드 브레이크포인트는 가장 간단한 사용법의 브레이크포인트다. 실행 중 브레이크를 원하는 C 코드 라인 또는 (Disassembly) 창의 명령어에서 브레이크포인트 토글만으로 사용할 수 있다. 응용 프로그램이 실행 중 브레이크포인트를 만나면 멈춘다. 이때 변수, 플래그, 레지스터들의 값을 확인할 수 있다. 값들의 임의 변경도 가능하다. 

 

코드 브레이크포인트의 하드웨어 브레이크포인트는 하드웨어 지원 개수만큼의 제한이 있다. 하지만 응용프로그램을 RAM에서 실행시키고 소프트웨어 브레이크포인트를 사용하면 제한이 없다. 코어텍스-M 계열 코어는 6~8개의 브레이크포인트 개수 제한이 있다. 이런 제한된 개수 내 브레이크포인트의 위치를 설정한 후 활성화/비활성화를 필요에 따라 선택할 수 있다. 메뉴의 View 탭에서 Breakpoints를 선택하면 설정된 브레이크포인트를 확인할 수 있고, 체크박스 선택으로 활성화/비활성화를 선택할 수 있다.

 

그림과 같이 비활성화 상태로 브레이크포인트를 선택하면 6~8개 이상의 브레이크포인트를 선택할 수 있다. 하지만 6~8개 이상의 브레이크포인트가 동시에 활성화되지는 않는다. 

 

마우스 오른쪽 버튼 클릭 후 ‘Edit’에서 조건에 사용되는 문법은 C언어와 유사하다. ==, >=, <= 등의 비교 구문을 사용할 수 있다. 예를 들어 전역 변수 counter가 10이 될때 응용프로그램을 멈추려면, “counter==10”이라고 조건식에 적어 넣으면 된다.

 

브레이크포인트 조건 설정 
조건 코드 브레이크포인트는 코드 브레이크포인트와 일부 플래그 또는 조건 변수의 조합으로 돼 있다. 브레이크포인트 설정 후 ‘View’메뉴의 브레이크포인트 창에서 모든 브레이크포인트 리스트를 확인할 수 있으며, 설정된 브레이크포인트를 선택 후 마우스 오른쪽 버튼을 클릭하면 추가 항목을 확인할 수 있다. 

 

조건 코드 브레이크포인트는 브레이크포인트가 인터럽트 루틴 안에 필요할 경우 매우 유용하다. 만약 조건식이 없다면 매번 실행 중 멈출 것이고 디버깅이 어려워진다. 브레이크포인트의 조건 설정으로 좀 더 쉽게 디버깅 할 수 있다. 또한, Condition true/changed 선택, Skip count를 이용하여 디버깅이 좀 더 쉬워진다. 

 

로그 브레이크포인트 
로그 브레이크포인트는 코드 브레이크포인트와 조금 다르다. 로그 브레이크포인트는 설정한 위치에서 멈추지 않고 코드가 수행되면 해당 기록을 Debug Log 창에 기록하는 기능을 한다. 로그 브레이크포인트도 조건 설정이 가능하며 C-SPY 매크로를 활용해 특정 메시지를 로그 기록에 남길 수 있다.

 

매번 브레이크포인트에 도달할 때마다 메시지가 Debug Log 창에 출력된다. 메시지 앞에 추가된 카운터 값으로 응용 프로그램이 실행되는 동안 브레이크포인트가 위치한 소스코드를 얼마나 많이 지나갔는지 알 수 있다. 

 

 

데이터 브레이크포인트 
데이터 브레이크포인트는 특정 주소의 메모리, 플래그, 변수 또는 레지스터에 접근해 읽기와 쓰기를 모니터하기 때문에 코드 브레이크포인트와 다르다. 데이터 브레이크포인트는 간단한 방법으로 사용할 수 있다. 플래그 또는 변수에서 마우스 오른쪽 버튼을 클릭한 후 Set Data Breakpoint for ‘---‘ 를 선택한다. 기본적으로 읽기와 쓰기 접근 모두 브레이크 된다.

추가 설정을 위해 메뉴의 ‘View / Breakpoints’에서 설정된 데이타 브레이크포인트를 선택 후 마우스 오른쪽 버튼을 클릭해 ‘Edit’ 항목을 선택한다. 설정 창에서 접근 형식에 따른 브레이크 설정과 특정 값이 됐을 때 활성화할 수 있는 Match ‘data’도 설정 할 수 있다. 이는 읽기와 쓰기에 관계없이, 자료 데이터가 설정 값이 같을 경우 멈추게 된다. ‘Break at’ 항목의 ‘Edit’ 버튼을 누르면 절대 주소와 소스의 위치 설정할 수 있도록 별도의 창이 뜬다. 그리고 변수 또는 플래그의 경우 ‘Size’를 ‘Auto’로 설정하길 권장한다. 만약 더 큰 범위의 모니터링이 필요한 경우 수동으로 설정할 수 있다. 

 

데이터 브레이크포인트는 플래그나 변수의 잘못된 값으로 인한 오류 디버깅에 매우 유용하게 사용된다. 또한, 스택의 오버플로우에 대한 디버깅에도 매우 유용하다. 데이터 브레이크포인트를 이용해 스택 최대 사용량의 80~90% 정도에 자료 데이터 브레이크포인트를 설정 후 응용 프로그램을 실행한다. 응용 프로그램이 중단된 이후 한 단계씩 진행하며 스택 오버플로우의 원인을 찾아 해결한다.

 

데이터 로그 브레이크포인트 
데이터 로그 브레이크포인트는 조금 특별하다. 데이터 브레이크포인트처럼 특정 위치의 접근으로 브레이크 되는 것이 아니라 해당 위치에 접근될 때마다 기록을 남기는 브레이크 포인트다. 또한, 응용 프로그램의 수행시간 동안 특정 플래그 또는 변수 값의 변화를 확인할 수 있는 브레이크포인트다.

데이터 로그 브레이크 포인트의 설정 방법은 다른 브레이크포인트와 같은 방법으로 설정할 수 있다. 플래그 또는 변수에서 마우스 오른쪽 버튼을 클릭한 후 Set Data Log Breakpoint for ‘---‘ 를 선택한다. ‘Breakpoints’ 창에서 설정된 데이터 브레이크포인트를 선택 후 마우스 오른쪽 버튼을 클릭해 ‘Edit’ 항목을 선택하면  데이터 브레이크포인트와 같이 ‘Access type, Size’ 설정이 가능하며 ‘Trigger range’ 설정도 가능하다.

 

설정한 브레이크포인트의 데이터 로그는 ‘Timeline’ 창과 ‘Debug probe menu’ > Data Log 창에서 확인할 수 있으며, 데이터 로그 중단 점은 최대 4개까지 활성화 할 수 있다. 또한, Data Log 창에 기록된 로그는 텍스트 파일로 저장할 수 있다. 

 

 

플래시 브레이크포인트 
IAR (임베디드 워크벤치) for ARM의 7.60.1 버전 이상에서 사용할 수 있고, 플래시 브레이크포인트는 하드웨어의 브레이크포인트 지원 개수와 상관없이 무제한 사용 가능한 브레이크포인트다. 만일 RAM에서 실행 코드를 실행시키는 경우라면 소프트웨어 브레이크포인트를 제한 없이 사용할 수 있다. 하지만 플래시에 코드를 다운로드 후 플래시 상에서 코드를 실행시키는 경우 하드웨어가 브레이크포인트를 사용할 수 있도록 지원해야 한다. 플래시에서 코드를 실행해 하드웨어 제한이 있는 경우라도 플래시 브레이크포인트를 사용하면 개수의 제한 없이 브레이크포인트를 사용할 수 있다. 

예를 들어, 코어텍스-M3/4 디바이스는 최대 6개의 하드웨어 브레이크포인트를 사용할 수 있다. 따라서 플래시에 코드를 다운로드 후 사용할 수 있는 브레이크포인트는 최대 6개로 제한된다. 이런 경우 6개 이상의 브레이크포인트를 사용하기 위해 플래시 브레이크포인트를 사용할 수 있다. 

설정 방법은 매우 간단하다. 플래시 브레이크포인트를 설정할 코드 위치에서 마우스 오른쪽 버튼을 클릭한 후 컨텍스트 메뉴에서 ‘Toggle Breakpoint’ (Flash)를 선택한다. 에디터의 왼쪽 여백에 F 형태의 붉은색 포인트를 확인할 수 있다. 

 

플래시 브레이크포인트는 개수의 제한이 없어, 많은 브레이크포인트를 활용해 디버깅할 수 있다. 플래시 브레이크포인트를 사용하면 플래시상의 코드를 수정하게 된다. C-SPY 디버거 환경의 종료를 원하면 반드시 ‘Stop Debugging’ 버튼을 이용해 C-SPY 디버거 환경을 종료해야 플래시의 코드가 원래 코드로 변경된다.

 

만일 다른 방법으로 임의로 종료되면 플래시상의 코드가 수정된 상태로 남게 돼 잘못된 동작을 할 수 있다. 이런 경우 다시 플래시 코드를 다운로드해야 한다.

 

작성: 이현도 IAR Systems Korea 기술지원팀 과장

이 기사를 공유합니다
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지