중단점 및 정의할 수 있는 여러 가지 방법, 그리고 모니터링하는 방법을 설명한다.

고성용 이사 IAR 시스템즈
Sung-Yong.Ko@iar.com

 

1. 중단점 설정 및 사용 소개

중단점을 설정하는 방법, 유형 등에 대해 알아본다.

1.1 중단점을 사용하는 이유
프로그램 논리가 올바른지 여부를 조사하거나 추적(trace) 출력 자료를 얻기 위해 코드에 중단점을 설정할 수 있다. 코드 중단점을 추가하고, 사용 중인 C-SPY 드라이버에 따라 다르지만 추가적으로 다른 유형의 중단점을 사용할 수 있다. 예를 들어, 어떻게 그리고 언제 데이터가 변경되었는지를 조사하기 위해 데이터 중단점을 설정할 수 있다.

1.2 중단점을 설정하는 간단한 방법
상호 작용, 정밀도, 타이밍 및 자동화의 다른 레벨을 허용하는 많은 다양한 방법으로 중단점을 설정할 수 있다. 정의한 모든 중단점은 Breakpoints 윈도우에 나타난다. 이 윈도우에서 편리하게 모든 중단점을 볼 수 있으며, 중단점을 활성화하거나 비활성화하며, 새로운 중단점을 정의하기 위해 대화상자를 연다. 또한, Breakpoint Usage window는 모든 내부적으로 사용된 중단점에 대해 나열한다.

1.3 중단점 유형
사용 중인 C-SPY 드라이버에 따라 여러 유형의 중단점을 지원한다.
Code breakpoints(코드 중단점):
프로그램 로직이 올바른지 조사하기 위해 또는 추적 출력을 얻기 위해 코드 중단점은 코드 위치에 사용된다. 코드 중단점은 명령어를 특정한 위치에서 가져올 때 작동한다. 특정 기계어 상에 중단점을 설정한 경우 중단점은 명령어가 실행되기 전에 작동하여 실행을 중지할 것이다.

Log breakpoints(로그 중단점):
로그 중단점은 응용 프로그램 소스 코드에 어떠한 코드도 추가하지 않고 추적 출력을 추가 할 수 있는 편리한 방법을 제공한다. 특정 위치의 명령어를 가져오면 로그 중단점이 동작한다. 특정 명령어에 중단점을 설정하였다면, 중단점이 동작되고 실행이 잠시 멈추고 C-SPY Debug Log 윈도우에 특정한 메시지를 출력할 것이다.

Trace breakpoints(추적 중단점):
추적 시작/중지 중단점은 추적 데이터 수집을 시작하고 중지한다. 실행 지점 간의 명령어를 분석하기 위해 편리한 방법이다.

Data breakpoints(데이터 중단점):
데이터 중단점은 메모리에 고정된 주소를 가지고 있는 변수에 주로 유용하다. 액세스할 수 있는 지역 변수에 중단점을 설정하면 해당 메모리 위치에 설정된다. 코드의 작은 부분에 대해 이러한 위치가 유효할 때만 보장된다. 특정 위치에서 데이터가 액세스되었을 때 데이터 중단점이 동작한다.

Data Log breakpoints(데이터 로그 중단점):
데이터가 지정된 위치에서 액세스할 때 데이터 로그 중단점은 실행된다. 특정 주소 또는 범위에 중단점을 설정하면 해당 위치에 각각의 액세스에 대해 로그 메시지가 SWO Trace window(Trace window in the simulator)에 표시된다. 로그 메시지는 데이터 로그 창에 표시할 수 있다.

Immediate breakpoints(즉각적인 중단점):
C-SPY 시뮬레이터는 즉각적인 중단점을 설정할 수 있는데, 단지 일시적으로 명령 실행을 중단한다. C-SPY 매크로 함수는 가상 프로세서가 어느 위치에서 데이터를 읽거나 데이터를 기입한 후 즉시 호출된다. 명령 실행은 이러한 동작 후 다시 시작된다.

JTAG watchpoints:
C-SPY J-Link/J-Trace 드라이버 및 C-SPY Macraigor 드라이버는 ARM7/9 코어의 JTAG watchpoint 메커니즘의 장점을 활용할 수 있다. EmbeddedICE watchpoint 비교기는 주소 버스, 데이터 버스, CPU 제어 신호 그리고 실시간으로 정의된 외부 입력 신호와 비교한다. 정의된 모든 조건에 해당하는 경우 프로그램이 중단된다.

 


그림 1.
중단점 아이콘

 


그림 2.
Breakpoint window

 


그림 3.
Breakpoint Usage window

 

1.4 중단점 아이콘
그림 1과 같이 중단점은 편집기 창의 왼쪽 여백에 아이콘으로 표시하고 아이콘은 중단점의 종류에 따라 다르다.

1.5 C-SPY 하드웨어 드라이버에서 중단점 
하드웨어 디버거 시스템에 대한 C-SPY 드라이버를 사용하여 다양한 중단점 유형을 설정할 수 있다. 중단점의 수는 대상 시스템에서 사용할 수 있는 하드웨어 중단점의 수에 따라 달라진다. 소프트웨어 중단점을 사용하도록 설정하면 이러한 경우에는 중단점의 수에는 제한이 없다.

1.6 중단점 소모
사용자 중단점:
중단점 대화 상자 또는 중단점을 편집기에서 설정하는 경우 하나의 물리적 중단점을 각각 소비하고 있지만 크게 다를 수 있다. 일부 사용자 중단점은 여러 물리적 중단점을 소비하지만 반대로 사용자 중단점은 한 물리적 중단점을 공유할 수 있다.

C-SPY 내부 사용:
•Run to 디버거 옵션이 선택되고 모든 스텝 명령이 사용된다. 이는 디버그 세션 동안 임시적인 중단점이다. 그들은 중단점 윈도우에서 보이지 않는다.
•링커 옵션 Semihosted 또는 IAR 중단점을 선택했다. DLIB 런타임 환경에서 C-SPY에서 시스템 중단점을 __DebugBreak 라벨로 설정한다.

C-SPY 플러그인 모듈:
예를 들어, 실시간 운영 체제에 대한 모듈에서 추가적으로 중단점을 소비할 수 있다. 특히, 기본적으로 스택 윈도우는 하나의 물리적 중단점을 소모한다.
스택 창에서 사용하는 중단점을 비활성화하려면,
1. Tools> Options> Stack을 선택한다.
2. Stack pointer(s) not valid until program
 reaches: label옵션 선택을 취소한다.
완전히 스택 창을 사용하지 않으려면 Project >Options>Debugger>Plugins를 선택하고 스택 플러그인을 취소한다.


 


그림 4.
Code Breakpoints dialog box




그림 5.
JTAG Watchpoints dialog box




그림 6.
Log Breakpoints dialog box
 

1.7 예외 벡터에 중단점
ARM9, Cortex-R4, 그리고 Cortex-M3 디바이스에 대한 예외 벡터에 중단점을 설정할 수 있다. 하드웨어적인 중단점을 사용하지 않고 인터럽트 벡터 테이블의 벡터에 직접적으로 중단점을 설정하기 위해 Vector Catch대화 상자를 이용하자.

1.8 __RAMFUNC 선언된 함수에 중단점 설정하기
__ramfunc로 선언된 함수에 중단점을 설정하려면 프로그램이 main함수까지 실행되어야 한다. 시스템 startup 코드에서 __ramfunc로 선언된 함수들을 저장된 위치에서(보통 플래시 메모리) RAM영역으로 이동시킨다. 이는 __ramfunc로 선언된 함수들은 main함수까지 실행되기 전에는 적절한 위치에 놓이지 못하며, 중단점을 설정할 수 없다. 이 문제를 해결하기 위해 Restore software breakpoints 옵션을 사용하자. 



2. 중단점 설정

중단점을 설정하고 사용에 관한 다양한 작업을 설명한다.

2.1 중단점을 설정하는 여러 가지 방법
•간단한 코드 중단점을 토글한다.
•편집기 윈도우, 중단점 윈도우, 디스어셈블리 윈도우의 문맥 메뉴에서 New Breakpoints 대화상자와 Edit Breakpoints 대화상자를 사용한다. 이 대화 상자는 모든 중단점 옵션에 대해 액세스 권한을 제공한다.
•직접 메모리 창에서 메모리 영역에 데이터 중단점을 설정한다.
•중단점 설정에 대해 미리 정의된 시스템 매크로를 사용한다.

2.2 간단한 코드 중단점 전환
코드 중단점을 전환하는 것은 중단점을 설정하는 간단한 방법이다. 다음 방법은 편집기 창 및 디스어셈블리 창에서 모두 사용할 수 있다.
•윈도우의 회색 왼쪽 여백을 클릭
•중단점을 원하는 C 소스 문 또는 어셈블러 명령에 삽입 포인터를 놓는다. 도구 모음에서 Toggle Breakpoint버튼을 클릭한다.
•마우스 오른쪽 버튼으로 클릭하고 문맥 메뉴에서 Toggle Breakpoint를 선택한다.

2.3 대화 상자를 이용하여 중단점 설정하기
대화 형으로 중단점의 특성을 세부적으로 조정할 수 있는 그래픽 인터페이스를 제공한다.
새로운 중단점을 설정하려면,
•중단점 창을 열기 위해 View>Breakpoints를 선택한다.
•중단점 창에서 마우스 오른쪽 버튼을 클릭하고 문맥메뉴의 New Breakpoint를 선택한다.
•하위 메뉴에서 설정하려는 중단점 유형을 선택한다.
•중단점 대화 상자에서 중단점 설정을 지정하고 OK를 클릭한다. 중단점 창에 표시된다. 기존 중단점을 수정하려면,
•중단점 창, 편집기 창 또는 디스어셈블리 창에서 수정하려는 중단점을 선택하고 문맥메뉴를 열기위해 마우스 오른쪽 버튼을 클릭하고 수정할 중단점을 선택한다.
•문맥 메뉴에서 적절한 명령을 선택한다.
•중단점 대화 상자에서 중단점 설정을 지정하고 확인을 클릭한다.


 


그림 7.
Data Breakpoints dialog box




그림 8.
Data Log Breakpoints dialog box
 

2.4 MEMORY 창에서 데이터 중단점 설정 
메모리 창에서 메모리 위치에 대해 직접 중단점을 설정할 수 있다.
메모리 창에 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 중단점 명령을 선택한다. 범위에 대한 중단점을 설정하려면, 메모리의 내용의 일부를 선택한다.

2.5시스템 매크로를 사용하여 중단점 설정하기
중단점 윈도우 대화 상자만 내장된 C-SPY 시스템 매크로를 이용하여 중단점을 설정할 수 있다. 중단점을 설정하기 위해 시스템 매크로를 사용하는 경우, 중단점 특성이 매크로 매개 변수로 지정된다.

2.6 예외 벡터에 중단점을 설정
이 절차는 I-JET, J-Link/J-Trace 및 Macrai gor에 적용된다.
예외 벡터에 중단점을 설정하려면,
•올바른 장치를 선택한다. C-SPY를 시작하기 전에 Project>Option을 선택하고 General Options 카테고리를 선택한다. Target 페이지의 Processor variant 드롭 리스트에서 사용 가능한 해당 코어 또는 장치를 선택하자.
•C-SPY를 시작한다.
•C-SPY driver>Vector Catch를 선택한다. 기본적으로, 브레이크포인트 옵션의 설정에 따라 선택된 벡터가 선택된다.
•Vector Catch 대화 상자에서 중단점을 설정하려는 벡터를 선택하고 그 이후 OK를 클릭한다. 중단점은 예외의 시작 부분에서 실행된다.

2.7 쓸만한 중단점 힌트
잘못된 함수의 인자를 추적: 포인터 인수를 가진 함수가 때때로 잘못 사용하여 NULL로 호출되는 경우, 그 동작을 디버깅하기를 원할 수 있다. 다음의 방법은 유용하게 사용할 수 있다.
•매개 변수가 0인 경우에 참인 조건식을 가진 함수의 첫 번째 줄에 중단점을 설정하자. 중단점은 문제 상황이 실제로 발생할 때까지 실행되지 않는다. 이 방법의 장점은 추가적인 소스 코드가 필요하지 않다는 것이다. 단점은 실행 속도가 느려질 수 있다는 것이다.
•예를 들어, assert 매크로를 문제가 있는 함수에 사용할 수 있다.

int MyFunction(int * MyPtr)
{
   assert(MyPtr != 0); /* Assert macro
   added to your source code. */
   /* Here comes the rest of your  function. */
}

 조건이 참인 때마다 실행이 멈출 것이다. 장점은 실행 속도가 매우 조금 영향을 받지만, 단점은 소스 코드에 작은 여분의 자취를 남긴다는 것이다. 또한, 실행이 멈추는 것을 없애는 유일한 방법은 매크로를 제거하고 소스 코드를 다시 빌드하는 것이다.
assert 매크로를 대신해서 함수를 다음과 같이 변경할 수 있다.

 int MyFunction(int * MyPtr)
{
   if(MyPtr == 0)
   MyDummyStatement; /* Dummy
   statement where you set a
   breakpoint. */
   /* Here comes the rest of your
   function. */
}

 
또한 조건문이 참인 경우마다 멈추어야 하므로 여분의 더미 문에 중단점을 설정해야 한다. 장점은 실행 속도가 아주 조금 영향을 받는다는 것이며, 단점은 여전히 소스 코드에 작은 자취를 남겨야 한다는 것이다. 그렇지만 이 방법으로 단지 중단점만을 제거하여 실행이 멈추는 것을 제거할 수 있다.

작업을 수행하고 실행을 계속: 중단점이 실행될 때 작업을 수행 한 후 자동으로 실행을 계속 진행할 수 있다. 예를 들어 C-SPY 매크로 함수처럼 중단점의 동작과 연관된 Action 텍스트 박스를 이용할 수 있다. 중단점이 트리거될 때 응용프로그램은 실행을 멈추게 되며, 매크로 함수가 실행된다. 이러한 경우 자동으로 계속되지 않는다.
대신 0(거짓)을 반환하는 조건을 설정할 수 있다. 중단점이 트리거될 때 조건식이(어떤 작업을 수행하는 C-SPY 매크로를 호출할 수 있는) 평가되고 참이 아니기 때문에 실행이 계속된다.
C-SPY 매크로 함수가 간단한 작업을 수행하는 예제를 참조해 보자.

 __var my_counter;
count()
{
   my_counter += 1;
   return 0;
}

 중단점에 대한 조건으로 이 함수를 사용하려면 Conditions 내의 Expression 텍스트 박스에서 count()를 입력하십시오. 중단점이 트리거될 때 작업이 수행된다. 매크로 함수 count가 0을 리턴하기 때문에 조건식은 거짓이 되고 프로그램의 실행은 정지 없이 자동적으로 재개된다.

3. 중단점에 대한 참조 정보

다음의 윈도우 및 대화 상자에 대한 참조 정보를 제공한다.

3.1 Breakpoints window
그림 2와 같이 브레이크포인트 윈도우는 View메뉴에서 사용할 수 있다.
브레이크포인트 윈도우는 사용자가 정의한 모든 중단점을 나열한다.
중단점을 편리하게 모니터링하고 활성화 및 해제하려면 이 윈도우를 사용하자(그림 3).
브레이크포인트 사용 윈도우는 현재 대상 시스템에 사용자가 정의한 것과 C-SPY 내부적으로 사용하는 설정된 모든 중단점을 나열한다.

3.3 Code breakpoints dialog box 
코드 중단점 대화 상자는 편집기 윈도우, 브레이크포인트 윈도우, 그리고 디스어셈블리 윈도우의 문맥 메뉴에서 사용할 수 있다(그림 4).

3.4 JTAG Watchpoints dialog box
JTAG Watchpoints 대화 상자는 드라이버 관련 메뉴에서 사용할 수 있다(그림 5).
위해 이 대화 상자를 사용한다. 필요한 watch points의 수가 2개를 초과하고, OK버튼을 클릭하면 오류 메시지를 표시할 것이다. 이 체크는 C-SPY Go 버튼에 대해 수행된다.

3.5 Log breakpoints dialog box
로그 중단점 대화 상자는 편집기 윈도우, 브레이크포인트 윈도우, 그리고 디스어셈블리 윈도우의 문맥 메뉴에서 사용할 수 있다(그림 6).

3.6 Data breakpoints dialog box 
데이터 중단점 대화 상자는 편집기 윈도우, 브레이크포인트 윈도우, 그리고 디스어셈블리 윈도우의 문맥 메뉴에서 사용할 수 있다(그림 7).

3.7 Data Log breakpoints dialog box
데이터 로그 중단점 대화 상자는 편집기 윈도우, 브레이크포인트 윈도우, 메모리 윈도우 그리고 디스어셈블리 윈도우의 문맥 메뉴에서 사용할 수 있다(그림 8).
최대 4 개의 데이터 로그 중단점을 설정하기 위해 데이터 로그 중단점 대화 상자를 사용하자.

3.8 Breakpoints options 
중단점 옵션 페이지 옵션 대화 상자에서 사용할 수 있다. Project>Options를 선택한다. 사용하는 디버거 시스템에 카테고리를 선택하고 Breakpoints 탭을 클릭한다 (그림 9).
3.9 Vector Catch dialog box
Vector Catch 대화 상자는 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 10).
인터럽트 벡터 테이블의 벡터에 직접 중단점을 설정하려면 이 대화 상자를 사용하여 하드웨어 중단점을 사용하지 않고 벡터에 중단점을 설정할 수 있다.

 

그림 9.
중단점 옵션






그림 10.
The Vector Catch dialog box-for ARM9/Cortex-R4 versus for Cortex-M3

 


회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지