브레이크포인트를 최대한 활용하는 방법

브레이크 포인트의 개념은 매우 간단합니다. 특정한 지시를 수행하기 바로 직전, 프로그램을 중단시키도록 간섭을 일으키는 것뿐이기 때문입니다. 그 구현은 하드웨어와 소프트웨어 상에서 모두 가능하지만 여기서는 그에 대해서는 다루지 않기로 합니다. 비록 브레이크포인트는 간단하지만, 복잡한 조합을 통해 버그를 손쉽게 해결해 줄 수 있는 기능도 있습니다. 사실, 소프트웨어 개발자라면 브레이크포인트가 없이는 살 수 없는 몸이 되어 버렸다고 할 것입니다. 그렇지만 이러한 브레이크포인트를 활용하기 위한 최선의 방법은 과연 무엇일까요?

IAR Embedded Workbench는 다음과 같은 브레이크포인트 사용을 지원하고 있습니다.  

  • 코드 브레이크포인트 
  • 조건부 코드 브레이크포인트 
  • 읽기/쓰기 액세스가 가능한 데이터 브레이크포인트 
  • 데이터 로그 브레이크포인트 
  • 로그 브레이크포인트 
  • 전력 브레이크포인트 
  • 추적 시작 및 정지 브레이크포인트 

 

이번 순서에서는 좀 더 빠른 속도로 소프트웨어를 디버깅할 수 있는 방법, 그리고 프로그램에서 지원하는 각각의 브레이크포인트를 사용하는 방법에는 어떠한 것이 있는지 살펴보도록 하겠습니다.  

코드 브레이크포인트 

코드 브레이크포인트는 전체 브레이크포인트 중에서도 사용 방법이 가장 간단한 것으로, 디스어셈블리 창(disassembly window)에서 C 라인 또는 ASM 명령어를 선택하기만 하고, 브레이크포인트를 활성화 시키면 됩니다. 브레이크포인트에 도달하게 되면 어플리케이션은 정지됩니다. 그리고 이때, 각종 변수 및 수치, 플래그, 레지스터 등등을 확인할 수 있습니다. 즉 사용자가 원하는 대로 정확하게 컨트롤이 가능한 것입니다. 

Making the best use of Breakpoints 1

코드 브레이크포인트의 개수는 하드웨어 브레이크포인트 개수로 제한되어 있지만, 소프트웨어 브레이크포인트를 사용하거나, RAM 상에서 어플리케이션을 실행시키는 경우 무한대로 사용할 수도 있습니다. Arm Cortex-M의 경우는 브레이크포인트 사용 가능 개수가 6-8개로 제한됩니다. 이렇게 제한이 있다고 하더라도, 사용자가 필요한 때에 위치를 저장하고 활성화/비활성화 시키는 것이 가능합니다. View-> Breakpoints window로 들어간 다음, 브레이크포인트 옆의 박스를 클릭하거나 해제하여 활성화 여부를 선택할 수 있습니다. 

Making the best use of Breakpoints 2

이 경우, 6~8 개 이상의 브레이크포인트를 사용하는 것이 가능하지만, 모든 브레이크포인트를 동시에 활성화 시키는 것은 불가능합니다. 

기본설정으로 IDE가 코드 브레이크포인트를 설정합니다. 만일 I-jet 디버그 프로브가 있으신 경우 코드의 해당 행을 클릭해 플래시 브레이크포인트를 명시적으로 선택할 수도 있습니다. 이 기능은 기존의 하드웨어 브레이크포인트를 모두 써 버린 상황에서 유용합니다. 여기서 브레이크포인트 기호 상의 “F”에 유의하십시오. 플래시 브레이크포인트 기능은 IAR Embedded Workbench for Arm 7.60 버전 이후부터 제공되고 있습니다. 

Making the best use of Breakpoints 1

조건부 코드 브레이크포인트 

조건부 브레이크포인트는 일부 플래그 또는 변수를 조건으로 사용하는 일련의 코드 브레이크포인트를 조합한 것입니다. 브레이크포인트가 일단 설정되면, 여기서 다시 한 번 View->Breakpoints window로 들어가 모든 브레이크포인트를 조회할 수 있습니다. 또한, Edit Option을 우클릭 하고 선택하여 추가 파라미터를 설정하는 것도 가능합니다.  

Makinghe best use of Breakpoints 4

문법은 C 언어 분법과 비슷합니다. ==, >=, <= 를 사용하십시오. 예를 들어 카운터가 10 이상이 되면 브레이크포인트에서 멈추도록 하고 싶은 경우, “counter ==10”으로 입력하시면 됩니다. 

Making the best use of Breakpoints 5

이것은 간섭 루틴 내부에서 브레이크포인트를 사용해야 하는 상황인 경우 매우 유용합니다. 여기서 조건이 없는 경우에는 어플리케이션의 디버깅이 불가능해 지는데, 무조건 정지해 버리고 말기 때문입니다. 플래그 또는 변수를 조건으로 사용하게 되면, 작업이 훨씬 쉬워질 것입니다. 또한 스킵 카운터 사용하고, true 또는 changed와 같은 조건 검사 구문을 상용하여 좀 더 고급구성을 사용할 수도 있습니다. 

쓰기/읽기 접근을 포함한 데이터 브레이크포인트 

데이터 브레이크포인트는 특정한 메모리 주소, 플래그, 변수, 레지스터의 읽기/쓰기 액세스를 감시한다는 점에서 다른 브레이크포인트와는 조금 다릅니다. 이 브레이크포인트의 사용법은 매우 간단하여, 플래그나 변수를 우클릭한 뒤 옵션에서 Set data Breakpoint를 선택하기만 하면 됩니다. 기본 설정으로 읽기 및 쓰기 설정을 감시하도록 되어 있으며, 여기에 설정을 추가하고자 하는 경우, View -> Breakpoints windowEdit 옵션에서 가능합니다. 이와 같은 접근 외에도, 데이터의 일치 여부도 확인이 가능합니다. 이것은 쓰기 또는 읽기 엑세스하여 데이터가 일치할 때에만 절반을 작동시킨다는 것을 의미합니다. Edit 버튼을 선택하면, 추가로 창을 열어 절대 주소를 선택하거나, 소스 라인을 선택하는 기능도 있습니다. 변수나 플래그를 사용하는 경우, auto size를 사용하실 것을 권합니다. 만일에 좀 더 넓은 범위에 대한 감시가 필요한 경우, manual size를 통하여 원하는 크기로 조정합니다.  

Making the best use of Breakpoints 6

데이터 브레이크포인트는 어플리케이션에 의해 변질될 수 있는 플래그 및 변수를 디버깅하는 데에 있어 매우 편리한 기능입니다. 접근이 이루어지면 어플리케이션의 실행이 중단됩니다. 또 다른 접근법은 소택 오버플로우 접근법입니다. 스택 용량의 80~90% 수준에 데이터 브레이크포인트를 설정하고, 오버플로우에 가까워지는 시점에 어플리케이션의 실행을 중단시키고 한 단계씩 나아가면서 근본 원인을 찾는 것이 가능합니다. 

데이터 로그 브레이크포인트 

읽기/쓰기 기능 포함 데이터 브레이크포인트에 더해서, 데이터 로그 브레이크포인트도 사용이 가능합니다. 데이터 로그 브레이크포인트의 목적은 특정한 변수나 메모리 주소의 값을 감시하고, 시간이 흐름에 따라 변화하는 양상을 그래프로 나타내는 데에 있습니다. 이러한 방법을 사용하게 되면 두 개 이상의 변수를 비교하기에 용이하고, 시간의 흐름에 따른 변화, 그리고 발동이 이루어지는 간섭을 감안할 수도 있습니다. 

Making the best use of Breakpoints 7

시간 및 추가 데이터로그, 그리고 데이터로그 요약은 아래 화면과 같이 프로브 옵션 하에서 찾아볼 수가 있습니다.

Making the best use of Breakpoints 8

로그 브레이크포인트 

코드 및 데이터 브레이크포인트에 더해, 로그 브레이크포인트도 제공되고 있습니다. 이것은 아주 특별한 브레이크포인트로서, 메시지를 출력하기 위해 잠시 동안만 코드 실행을 중단시킵니다. 정확하게는 브레이크포인트에 도달하게 되면 단 한 번만 선택된 메시지를 출력합니다.  

Making the best use of Breakpoints 9

브레이크포인트에 도달하게 되면, 디버그 로그 창에 메시지가 표시됩니다. 추가 카운터를 통해 정확하게 얼마나 많은 어플리케이션이 해당 소스 코드를 통과해 지나갔는지도 알 수가 있습니다. 

Making the best use of Breakpoints 10

전력 브레이크포인트 

IAR Embedded Workbench에서 제공하고 있는 전력 디버그 기술의 덕택으로 에너지 소모량을 감시하여 이를 소스 코드와 연계 시킬 수도 있습니다. 이를 통해 전체 어플리케이션의 에너지 소모량을 파악할 수가 있습니다. 이를 통해 전력 브레이크포인트를 추가하는 것도 가능해 집니다. 25mA와 같이 지정된 임계치를 설정하고, 해당 에너지양을 초과하는 경우 디버거가 실행을 중단 시킬 것입니다

Making the best use of Breakpoints 11

임계치를 설정하는 것도 매우 간단합니다. I-jet-> PowerLog window를 연 다음, 위에서 보여 주는 바와 같이 수치, 그리고 원하는 옵션을 선택하십시오. 

Making the best use of Breakpoints 12

이러한 기능은 전력 소모량 피크에 도달하는 사태, 또는 지정된 전력량을 초과하는 사태를 방지하는 데에 매우 유용합니다. 그리고 이러한 종류의 분석을 실시하게 되면 배터리 지속 시간을 늘리는 데에도 도움을 줍니다. 어플리케이션을 그냥 장시간 실행해 두기만 하면 되며, 타임라인 창은 필수는 아니지만 에너지 사용량에 대한 정보를 한 눈에 볼 수 있도록 해 줍니다.  

추적 시작 및 정지 브레이크포인트 

오늘 소개해 드릴 마지막 브레이크포인트는 추적 시작 및 정지 브레이크포인트입니다. 이것은 고급형의 추적 프로브를 가지고 계신 경우 활용이 가능한 기능으로, I-jet Trace for Arm Cortex -M 이나 I-jet Trace for Cortex -A/R/M 등이 지원됩니다. 이 기능은 특히 어플리케이션 중의 일부만을 분석하고자 할 때에 유용합니다. 추적 시작 및 정지 브레이크포인트는 사용법도 간단하여, 소스 코드의 해당 행을 우클릭하고, 추적을 시작할 것인지 아니면 끝낼 것인지를 결정하기만 하면 됩니다. 추적 버퍼는 지정된 코드 행 사이에서만 명령어를 전달받게 됩니다. 

Making the best use of Breakpoints 13

또한 추적 명령 시점으로부터 추적 시작시점부터 정지 브레이크포인트 사이의 타임라인 상의 콜 스택을 그래프로 작성해 한 눈에 살펴 볼 수 있는 기능도 있습니다.  

Making the best use of Breakpoints 14

I-jet Trace와 같은 추적 프로브는 JTAG/SWD 등의 일반 프로브와 비교해 항상 더 우수한 기능을 지니지만, 경우에 따라서는 모든 정보를 정확하게 해석하는 데에 어려움이 있을 수가 있습니다. 수 백 만 개의 불필요한 명령을 전달받지 않도록 하고, 디버그 과정을 간편하게 진행하고 싶다면 IAR Embedded Workbench에서 제공하는 추적 개시 및 종료 브레이크포인트 기능을 이용해 보시기 바랍니다.  

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.