이번 호에서는 변수와 표현식을 C-SPY?에서 사용할 수 있는 방법에 대해 살펴보도록 한다.

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

 

1. 변수와 표현식 작업 소개

변수와 표현식에 대해 알아보고 C-SPY에서 표현식 및 변수의 제한 사항에 대해 살펴보자.

1.1 C-SPY 표현식
C-SPY 표현식은 함수 호출을 제외하고 C 표현식의 모든 종류를 포함할 수 있다.
심볼의 이러한 유형으로 미리 작성된 표현식을 C-SPY 표현식이라고 말하며, C-SPY에서 이러한 내용을 모니터링하기 위한 여러 가지 방법이 있다. 아래 식은 유효한 C-SPY 표현식의 예제다.
 

i + j,                 i = 42,                  myVar = cVar,               cVar = myVar + 2,
#asm_label,             #R2, #PC,               my_macro_func(19)
 

서로 다른 함수에서 같은 이름으로 정의된 정적 변수가 있는 경우 모니터할 변수를 지정하기 위해 function::variable 표기법을 사용한다.

C/C++ 심볼
C 심볼은 응용 프로그램의 C 소스 코드에서 정의한 심볼이며, 예를 들어 인스턴스 변수, 상수 및 함수(함수는 심볼로 사용할 수 있지만 실행될 수는 없다) C 심볼들은 이름에 의해 참조될 수 있다.

어셈블러 심볼
어셈블러 심볼은 어셈블러 레이블이나 레지스터가 될 수 있다. 예를 들어 프로그램 카운터, 스택 포인터, 또는 다른 CPU 레지스터들이다.   # 을 접두어로 하는 경우 어셈블러 심볼은 C-SPY 표현 식에서 사용할 수 있다.

C-SPY 매크로 함수
매크로 함수는 C-SPY 매크로 변수 정의와 매크로가 호출 될 때 실행되는 매크로 문장으로 구성되어 있다.

C-SPY 매크로 변수
매크로 변수는 응용 프로그램의 외부에서 정의되고 할당되며, 그리고 C-SPY 표현식에서 사용할 수 있다. C 심볼과 C-SPY 매크로 사이에 이름 충돌의 경우 C-SPY 매크로 변수는 C 변수보다 우선 순위가 높다. 매크로 변수의 할당은 값과 타입을 모두 지정한다.
sizeof 사용
표준 C에 따르면, 두 가지 구문 형태가 있다.
 

sizeof(type)
sizeof expr


1.2 VARIABLE 정보에 대한 제한 사항
C 변수의 값은 스텝포인트에서만 유효하다. 즉, 문(statement)의 첫 번째 명령어이거나 함수 호출 상태에서다. 이것은 편집기 창에서 밝은 녹색 강조 표시 색상으로 표시된다.

최적화의 효과
컴파일러는 응용 프로그램 소프트웨어를 최적화하는데 무료다. 최적화는 코드에 영향을 미칠 수 있으므로 디버깅을 더욱 어렵게 만들 수 있다. 이는 소스 코드와 생성된 코드간의 관계가 덜 명확하기 때문이다. 일반적으로, 높은 최적화 수준을 사용하면, 예상대로 변수의 값을 볼 수 없는 상황으로 코드에 영향을 줄 수 있다. 다음 예제를 살펴보자.
 

myFunction()
{
int i = 42;
...
x = computer(i); /* Here, the value of i is known to C-SPY */
...
}


변수 i가 선언되고 실제로 사용되기 전까지 컴파일러는 스택이나 레지스터를 낭비하지 하지 않는다. 컴파일러가 최적화를 할 수 있으며, 이는 C-SPY에서 실제로 사용되기 전까지는 값을 표시할 수 없다. 임시로 사용할 수 없는 변수의 값을 보려 한다면, C-SPY는 Unavailable 라는 문구를 표시해야 한다. 디버깅 기간중에 변수의 값에 대한 자세한 정보가 필요하면, 컴파일동안 가장 낮은 최적화 단계인 None을 사용해야 한다.


2. 변수와 표현식 사용


변수와 표현식을 사용하는 것과 관련된 다양한 작업에 대해 살펴보자.



2.1 변수와 표현식에 관련된 윈도우 사용하기
표현식들을 추가, 수정 및 제거할 수 있고 변수와 표현식에 관련된 윈도우들의 표시 형식을 변경할 수 있다.
값을 추가하려면 점선 사각형을 클릭하고 검사를 원하는 표현식을 입력할 수 있다. 표현식의 값을 수정하려면 값(Value) 필드를 클릭하고 그 내용을 수정한다. 표현식을 제거하려면 항목을 선택하고 Delete 키를 누른다.
Trace 윈도우를 제외한 이러한 윈도우들은 열에서 너무 큰 폭의 텍스트에 대해서는 가리게 되며, 마우스 포인터를 그 텍스트에 놓으면 툴팁 정보로 표시된다.

추가 명령을 포함하고 있는 문맥 메뉴(context menu)를 액세스 하기 위해 윈도우에서 마우스 오른쪽 버튼을 클릭해야 한다. Locals 윈도우, Data logging 윈도우, 그리고 Quick Watch 윈도우를 제외하고 윈도우 사이의 편리한 드래그 앤 드롭이 지원된다.

2.2 어셈블러 변수보기
어셈블러 레이블은 형식 정보를 전혀 전달하지 않는다. 즉, C-SPY가 별도의 정보 없이 레이블에 있는 데이터를 쉽게 표시할 수 없다. 편리하게 데이터를 보기 위해 C-SPY는 기본적으로 어셈블러 레이블에 있는 모든 데이터를 int 형의 변수로 취급한다. 하지만, Watch, Quick watch, 그리고 Live Watch 윈도우에서 좀 더 변수의 선언에 맞게 다른 해석을 선택할 수 있다. 그림 1에서는 Watch 윈도우에서 네 개의 변수와 왼쪽의 어셈블러 소스 파일에 해당되는 선언을 볼 수 있다.





2.3 데이터 로그(Data Log)를 사용하기
1. 데이터 로그를 설정하려면, C-SPY 드라이버> SWO 구성을 선택한다. 대화 상자에서 추적(trace) 데이터에 대한 serial-wire output 통신 채널을 설정한다. 특히 CPU 클럭 옵션을 주의해야 한다.
2. 중단 점 또는 메모리 윈도우에서 중단 점 대화 상자를 열기 위해 마우스 오른쪽 버튼을 클릭하고 New Breakpoints>Data Log를 선택한다. 로그 정보를 수집하려면 Data Log breakpoint를 설정하기 바란다. 4개까지 Data Log breakpoint를 설정할 수 있다.
3. 데이터 로그 윈도우를 열려면  C-SPY driver>Data Log 를 선택해야 한다. 선택적으로, 또한 다음에서 선택할 수 있다.
 • Data Log Summary 윈도우를 열려면 C-SPY driver>Data Log Summary
 • Data Log Graph를 보기 위해 Timeline 윈도우를 열려면 C-SPY driver>Timeline
4. 데이터 로그 창에서 사용할 수 있는 컨텍스트 메뉴에서 로그 활성화를 위해 Enable을 선택한다.
5. SWO Configuration 대화 상자에서 데이터 로그가 활성화되어 있는 데이터 로그 이벤트 영역에 나타날 수 있다. 원하는 로그의 수준을 선택하기 바란다.
 • PC only / PC + data value + base addr / Data value + exact addr
C-SPY 시뮬레이터를 사용하는 경우 단계를 무시할 수 있다.
6. 로그 정보를 수집하기 위해 응용 프로그램을 실행하자.
7. 데이터 로그 정보를 보려면, 데이터 로그, 데이터 로그 요약, 타임 라인 윈도우에서 데이터 그래프를 살펴보기 바란다.
8. 파일에 로그 또는 요약을 저장하려면 윈도우에서 문맥 메뉴 중 Save to log file을 선택해야 한다.
9. 데이터 및 인터럽트 로그를 사용하지 않으려면 각각의 활성화한 윈도우에서 각 문맥 메뉴를 호출하여 Disable을 선택해야 한다.





2.4 이벤트 로그(Event Log) 사용하기
1. 이벤트를 생성할 응용 프로그램 소스 코드의 위치를 지정하려면 arm_itm.h(armincc에 위치)에서 미리 정의된 전처리 매크로를 사용하자.
응용 프로그램 소스 코드에서 다음과 같이 작성해야 한다.
 

#include
void func(void)
{
ITM_EVENT8_WITH_PC(1,25);
ITM_EVENT32_WITH_PC(2, __get_PSP());
}


첫 번째 줄은 채널1에 값을 25로 이벤트를 보낸다. 두 번째 라인은 채널2에 스택 포인터의 현재 값으로 이벤트를 보낸다.
2. 이벤트 로그 정보를 보려면, 다음 대안 중 하나를 선택할 수 있다.
• 타임라인 윈도우를 열기 위해 C-SPY driver> Timeline을 선택하고 Event Log Graph에서 문맥 메뉴 중 Enable을 선택한다.
• 이벤트 로그 윈도우를 열기 위해 C-SPY driver> Event Log을 선택하고 문맥 메뉴에서 Enable을 선택한다.
• 이벤트 로그 요약 윈도우를 열기 위해 C-SPY driver> Event Log Summary를 선택하고 문맥 메뉴에서 Enable을 선택한다.
3. 표시 형식을 변경하려면(값을 2진수 또는 10진수 형식으로 표시하는 것을 선택할 수 있다) 타임라인 윈도우에서 형식 변경을 원하는 이벤트 그래프를 선택해야 한다. 마우스 오른쪽 버튼을 클릭하고 문맥 메뉴에서 원하는 형식을 선택하자.
4. 로그 정보를 수집하기 위해 응용 프로그램을 실행한다.
5. 이벤트 로그 정보를 보려면 이벤트 로그, 이벤트 로그 요약, 또는 타임라인 창에서 특정 채널에 대한 이벤트 그래프를 보면 된다.
6. 파일에 로그 또는 요약 내용을 저장하려면 해당 윈도우에서 Save to log file을 선택해야 한다.
7. 이벤트 로깅을 사용하지 않으려면 활성화되어 있는 각 윈도우에서 문맥 메뉴 중 Disable을 선택하기 바란다.






3. 변수와 표현식 사용에 대한 참조 정보

윈도우 및 대화 상자에 대한 여러 관련 정보를 제공한다.

3.1 Auto 윈도우
Auto 윈도우는 View 메뉴에서 사용할 수 있다. 이 윈도우에서 현재 문 안에서 또는 근처에서 변수와 표현식의 선택된 정보를 표시한다. C-SPY에서 실행이 중지될 때마다 Auto 윈도우의 값들은 다시 계산된다. 마지막으로 실행이 중지된 이후 값이 변경되었을 경우에는 빨간색으로 강조 표시된다.

3.2 Locals 윈도우
Local 윈도우는 View 메뉴에서 사용할 수 있다. 이 윈도우는 현재 함수의 지역 변수와 매개 변수를 표시한다. C-SPY에서 실행이 중지될 때마다 Locals 윈도우의 값들은 다시 계산된다. 마지막으로 실행이 중지된 이후 값이 변경되었을 경우에는 빨간색으로 강조 표시된다.





3.3 Watch 윈도우
Watch 윈도우는 View 메뉴에서 사용할 수 있다. C-SPY 표현식 또는 변수의 값을 모니터링 하려면 이 윈도우를 사용하기 바란다. 이 윈도우는 최대 4개까지 열 수 있으며, 표현식을 추가, 수정 및 제거할 수 있다. 배열, 구조체, 그리고 유니온(union)의 트리 구조는 확장이 가능하며, 각 항목에 대해 조사할 수 있다. C-SPY에서 실행이 중지될 때마다 Locals 윈도우의 값들은 다시 계산된다. 마지막으로 실행이 중지된 이후 값이 변경됐을 경우에는 빨간색으로 강조 표시된다.

3.4 Live Watch 윈도우
Live Watch 윈도우는 View 메뉴에서 사용할 수 있다. 이 윈도우는 반복적으로 응용 프로그램이 실행하는 동안 표현식의 값을 수집하고 표시한다. 표현식에 있는 변수는 전역변수처럼 정적으로 위치해야 한다. 이 윈도우는 이 기능을 지원하는 하드웨어 타겟 시스템에서 사용할 수 있다.

3.5 Static 윈도우
Static 윈도우는 View 메뉴에서 사용할 수 있다. 이 윈도우는 선택되어 있는 동안 정적 저장소 기간의 변수의 값을 표시한다. 정적 저장소 기간에 volatile로 선언된 변수들은 표시되지 않음을 주의하기 바란다. 마지막으로 실행이 중지된 이후 값이 변경됐을 경우에는 빨간색으로 강조 표시된다.





3.6 Macro Quicklaunch 윈도우
Macro Quicklaunch 윈도우는 View 메뉴에서 사용할 수 있다. 일반적으로 C-SPY 매크로를 평가하려면이 윈도우를 사용하기 바란다. Macro Quicklaunch 윈도우는 빠른 Watch 윈도우와 비슷하지만 주로 C-SPY 매크로를 평가하도록 설계됐다. 이 윈도우는 표현식을 평가하는 경우 정확한 제어를 할 수 있다.

3.7 Quick Watch윈도우
Quick Watch 윈도우는 View 메뉴 또는 편집기 윈도우에서 문맥 메뉴에서도 사용할 수 있다. 특정 시점에서 변수 또는 표현식의 값을 보거나 표현식을 평가하려면 이 윈도우를 사용하기 바란다. Watch 윈도우와 대조적으로, C-SPY 매크로 함수와 같은 표현식에 대해 통제된 조건 하에서 평가할 수 있다.







3.8 Symbol 윈도우
심볼 윈도우는 View 메뉴에서 사용할 수 있다. 이 윈도우는 고정된 위치를 가진 모든 기호를 표시한다. 즉, C/C++ 함수, 어셈블러 레이블과의 심볼을 포함한 정적 저장 기간의 변수들이며, 런타임 라이브러리에서 제공되는 심볼도 포함되어 있다.

3.9 Data Log 윈도우
데이터 로그 윈도우는 C-SPY 드라이버 메뉴에서 사용할 수 있다. 최대 4개까지 서로 다른 메모리 위치 또는 영역에 액서스를 기록하려면 이 윈도우를 사용하기 바란다.

3.10 Data Log Summary 윈도우
데이터 로그 요약 윈도우는 C-SPY 드라이버 메뉴에서 사용할 수 있다. 이 윈도우는 특정 메모리 위치 또는 영역에 접근하는 데이터의 요약된 내용을 표시한다.

3.11 Event Log 윈도우
이벤트 로그 윈도우는 C-SPY 드라이버 메뉴에서 사용할 수 있다. 응용 프로그램 코드에서 특정 위치를 실행할 때 윈도우는 이벤트 로그의 내용을 표시한다. Cortex-M ITM 통신 채널들은 실행중인 응용 프로그램에서 C-SPY Event Log시스템으로 이벤트 로그를 전달하는데 사용된다.



3.12 Event Log Summary 윈도우
이벤트 로그 요약 윈도우는 C-SPY 드라이버 메뉴에서 사용할 수 있다. 이 윈도우는 응용 프로그램 코드에서 특정 위치를 실행할 때 이벤트 로그의 요약 내용을 표시한다. Cortex ITM 통신 채널들은 C-SPY 프로그램 이벤트 로그 시스템으로 실행중인 응용 프로그램에서 이벤트 로그를 전달하는 데 사용된다.


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