TECHNICAL FEATURE

추적(Trace)


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


C-SPY에서 추적 데이터 수집 및 사용에 대한 내용을 살펴본다.


추적 사용 소개

1. 추적 사용 이유
추적을 사용하면 특정 상태로 프로그램 흐름을 조사할 수 있다. 예를 들어, 응용 프로그램 충돌, 그리고 문제의 출처를 찾기 위해 추적 데이터를 사용한다. 추적데이터는 불규칙한 증상과 간헐적으로 발생되는 프로그래밍 오류를 찾는 데 유용한다.

2. 추적 트리거(trace triggers) 및 추적 필터(trace filters)를 사용하는 이유
추적 트리거와 추적 필터 조건을 사용하여, 소스 코드의 관심 있는 부분을 선택할 수 있고 보다 효율적으로 추적 프로브의 추적 버퍼를 사용할 수 있다. 추적 트리거는(추적시작점과 추적 중지 중단점) 추적 데이터를 수집하고자하는 코드 섹션을 지정한다.
추적 필터는 조건이 충족될 때 실행 중에 추적 데이터 수집을 활성화하는 조건을 지정한다.

3. 간단한 TRACE 소개
타겟 시스템은 추적 데이터를 생성할 수 있어야 한다. C-SPY는 추적 데이터를 수집하고 다양한 Windows 및 대화 상자에서 데이터를 시각화하고 분석할 수 있다.
- ETM trace: ETM 추적은(full trace라고도 함) 선택 부분 실행에 대한 모든 실행된 명령어를 지속적으로 수집한다. 버퍼가 수용할 수 있는 만큼의 데이터만을 수집할 수 있다. 디버그 프로브는 실시간으로 추적 데이터를 수집하는 추적 버퍼가 포함되어 있지만 데이터실행이 중지될 때까지 C-SPY 창에 표시되지 않는다.
- ETB trace: ETB trace(Embedded Trace Buffer)는 ETM trace와 유사하지만, 큰 차이점은 추적 데이터가 온칩 추적 버퍼에 수집된다는 것이다. 추적 버퍼는 지정된 메모리 영역을 갖고 있으며 미리 정해진 크기를 가진다.
- MTB trace: MTB trace (Micro Trace Buffer)는 ETM trace의 단순화된 형태로 온칩 추적 버퍼를 사용한다. MTB 추적을 위해 추적 버퍼는 어플리케이션과 함께 RAM 메모리를 공유한다. MTB 추적은 Cortex-M0+ 코어 기반의 디바이스에 대해 명령어 트레이스 엑서스를 제공한다.
- SWO trace: SWO 추적은 온칩 디버그하드웨어에 의해 생성된 다양한 종류의 이벤트 순서다. 이벤트가 SWO 통신 채널을 통해 타겟 시스템에서 실시간으로 전송된다. 즉, C-SPY 윈도우가 타겟 시스템이 실행되는 동안 지속적으로 업데이트된다.

4. C-SPY의 추적 기능
C-SPY에서 추적 관련 창 Trace, Function Trace, Timeline과 Find in Trace를 사용할 수 있다. C-SPY 시뮬레이터에서 추적 표현식 창(Trace Expressions window)을 사용할 수 있다. C-SPY 드라이버에 따라 추적 데이터를 수집하기 위해 추적 중단점 및 추적 트리거의 다양한 종류를 설정할 수 있다.

C-SPY I-jet/JTAGjet 드라이버 C-SPY J-Link/J-Trace 드라이버, 또는ST-LINK 드라이버를 사용하는 경우Interrupt Log, Interrupt LogSummary, Data Log, and Data Log Sum mary windows에 액세스 할 수 있다.
디버깅 할 때, ETM 및 SWO로 표시되는 두 개의 버튼을 각각 IDE 메인 화면에서 볼 수 있다. 이러한 버튼 중 하나가 녹색일 경우, 이는 해당 추적 하드웨어는 추적 데이터를 생성함을 의미한다. 마우스 포인터를 버튼에 위치시키면 추적 데이터 생성에 요구된 C-SPY 기능에 대한 자세한 툴팁 정보를 볼 수 있다. 예를 들어 현재 추적 데이터를 사용하기 위해 너무 많은 C-SPY 기능을 사용하기 때문에 SWO 통신 채널이 종종 오버플로우가 되는 경우에 유용하다. 버튼을 클릭하면 해당 설정 대화상자를 연다.

5. TRACE를 사용하기 위한 요구 사항
C-SPY 시뮬레이터는 추적 관련 기능을 지원하며, 특별한 요구 사항은 없다.

ETM 트레이스를 사용하기 위한 요구사항: ETM 추적을 사용하려면 다음 조합 중 하나여야 한다.
- I-jet in-circuit debugging probe 및 ETB(Em bedded Trace Buffer) 통해 ETM를 지원하는 디바이스. JTAGjet 디버그 프로브는 ETB 버퍼로부터 ETM 데이터를 읽는다. C-SPY I-jet/JTAGjet 드라이버를 사용하자.
- J-Trace 디버그 프로브 및 ETM을 지원하는 디바이스. C-SPY J-Link/J-Trace 드라이버를 사용하자.
- J-Link 디버그 프로브 및 ETB(Embedded Trace Buffer) 통해 ETM를 지원하는 디바이스다. J-Link 프로브는 ETB 버퍼로부터 ETM 데이터를 읽는다. C-SPY J-Link/J-Trace 드라이버를 사용하자.
SWO 추적 사용에 대한 요구사항: SWO 추적을 사용하려면 SWO 통신 채널을 지원하는 I-jet in-circuit debugging probe, J-Link, J-Trace, 또는 ST-Link 디버그 프로브와 SWD/SWO 인터페이스를 지원하는 디바이스가 필요하다.
추적 트리거 및 추적 필터를 사용하기 위한 요구사항: 추적 실행 및 추적 필터 기능은 JTAGjet와 J-Trace만 가능하며, ARM7/9 또는 Cortex-M 디바이스를 사용할 때 가능하다.


그림 1.
ETM Trace Settings dialog box(I-jet/JTAGjet)


그림 2.
ETM Trace Settings dialog box(J-Link/J-Trace)

 

추적 데이터 수집 및 사용

추적 데이터를 수집 및 사용에 관한 다양한 작업을 설명한다.

1. ETM TRACE 시작하기
C-SPY를 시작하기 전에 다음과 같은 사항을 기억해야 한다.
- 디바이스에 대해 추적 포트를 설정해야 한다. 일부 디바이스의 경우는 추적 로직이 활성화되면 자동으로 설정된다. 그러나 일부 디바이스에 있어, 주로 ARM7또는 ARM9 기반의 Atmel과 ST 디바이스들은 명시적으로 추적 포트를 설정해야 한다. C-SPY 매크로 파일에서 이 작업을 수행한다. 예제 프로젝트에서 이런 파일(ETM_init*.mac)의 예제를 찾을 수 있다. 매크로 파일을 사용하려면 Project>Options>Debugger>Setup>Use macro files을 선택하라. 매크로 파일을 지정한다. 편의를 위해 탐색 버튼을 사용할 수 있다. 추적 신호를 - C-SPY를 시작하고 C-SPY 드라이버 메뉴에서 Trace Setup을 선택한다. TraceSettings대화 상자가 나타나고 기본값을 변경해야하는 경우인지 확인하자.
- 드라이버 메뉴에서 사용할 수있는 Trace 윈도우를 열고 추적 데이터를 수집하기 위해활성화(Activate) 버튼을 클릭한다.
- 실행을 시작한다. 실행이 중지되면, 예를 들어 중단점이 동작하고, 추적 데이터가trace 윈도우에 표시된다.


그림 3.
SWO Trace Window Settings dialog box

 

2. SWO TRACE 시작하기
SWO 추적 사용을 시작하려면 다음과 같은 사항을 기억해야 한다.
- C-SPY을 시작하기 전에, I-jet/JTAGjet에 대해 Project>Options>I-jet/JTAGje, J-Link/J-Trace에 대해 Project>Options>J-Link/J-Trace, 또는 ST-LINK에 대해 Project>Options>ST-Link를 각각 선택한다. 각각 JTAG/SWD 탭 또는 Connection탭을클릭하고 Interface>SWD를 선택한다. 또한, I-JET인 경우 JTAG 및 옵션 SWO>SWOon the TraceD0 pin을 선택한다.
- C-SPY를 시작한 후 C-SPY 드라이버 메뉴에서 SWO Trace Windows Settings를  선택한다. 나타나는 대화 상자에서 추적 창에 표시되는 내용을 제어하기 위한 설정을 하자.  통계적인 추적 데이터를 보려면 옵션 Force>PC samples를 선택하자.
- 추적 데이터의 하드웨어에서 생성되도록 구성하려면 SWO Configuration 대화 상자에서 SWO Configuration 버튼을 클릭한다.
특별히 CPU 클럭 옵션의 값은 응용 프로그램이 실행되는 CPU 클럭 속도의 주파수를 반영해야 함, 설정내용은 디버그 세션 사이에 보존됨. 통신 채널에서 전송의 양을 감소하기 위해 Timestamp를 해제함, 또는 PC 샘플링에 대한 낮은 속도를 설정하거나 높은 SWO 클럭 주파수를 사용함 등을 주의하자.
- C-SPY 드라이버 메뉴에서 사용할 수 있는 SWO 추적 윈도우를 열자. 그리고 추적 데이터 수집을 활성화하기 위해 활성화 버튼을 클릭한다.
- 실행을 시작한다. 추적 창에는 지속적으로 추적 데이터가 업데이트된다.


그림 4.
SWO Configuration dialog box
 


3. ETM 및 SWO 동시에 사용 설정하기
Cortex-M3에 대한 JTAGjet 또는 J-Trace디버그 프로브가있는 경우, ETM 추적과 SWO 추적을 동시에 사용할 수 있다. ETM 추적 및 SWO 추적을 활성화하는 경우 SWO 추적 데이터는 SWO 채널을 통한 스트리밍 대신에 ETM 추적 버퍼에 수집된다. 지속적으로 SWO 추적 창에서 실시간 업데이트되는 대신에 실행이 중지될 때까지 SWO 추적 데이터가 표시되지 않는다.

4. 중단점 사용 TRACE 데이터 수집
두 실행 지점 사이의 추적 데이터를 수집할 수 있는 편리한 방법은 전용 중단점을 사용하여 데이터 수집을 시작하고 중지하는 것이다.
- 편집기 또는 디스어셈블러 창에서 포인터를 위치시킨 후 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 Trace Start또는 Trace Stop 중단점을 토글한다.
- 중단점 창에서 Trace Start, Trace Stop, or Trace Filter를 선택한다.
- C-SPY 시스템 매크로 __setTraceStartBreak 과 __setTraceStopBreak도 사용할 수 있다.

추적 트리거 및 추적 필터를 사용하기 위해서는 다음의 사항을 주의하자.
- 시작 조건을 설정하기 위해 Trace Start대화 상자를 사용한다. 추적 데이터 수집을 시작한다.
- 중지 조건을 설정하기 위해 Trace Stop대화 상자를 사용한다. 추적 데이터 수집을 중지한다.
- 선택적으로, 계속 추적 데이터 수집에 대한 추가 조건을 설정한다. 그런 다음 Trace Filter 대화 상자를 사용하여 하나 이상의 추적 필터를 설정한다.
- 필요한 경우 추가적인 추적 시작 또는 중지 조건을 설정하자.
- 추적 창을 활성화하고 실행을 시작한다.
- 실행을 중지한다.
- 추적 윈도우와 디스어셈블리 윈도우 브라우저 모드에서 추적 데이터를 볼 수 있으며, 여기서 또한 추적 트리거 및 추적 필터에 대한 표시를 볼 수 있다.
- 추적 필터를 설정한 경우, 몇 가지 추가 명령을 포함해서 조건이 참인 동안 추적 데이터 수집이 수행된다. 특정 데이터 액세스에 대해 추적 데이터를 조회하고 검색할 때 액세스는 한 명령어 이전에 발생했음을 기억해야 한다.


그림 5.
The Trace window



그림 6.
Function Trace window

 

5. 추적 데이터 검색
추적 데이터를 수집한 경우에, 예를 들어, 특정 인터럽트 또는 특정 변수의 접근과 같은  관심 있는 코드 또는 데이터의 부분을 수집된 데이터 검색을 수행할 수 있다. Find in Trace 대화 상자에서 검색 기준을 지정하고 Find in Trace윈도우에서 결과를 볼 수 있다.

추적 데이터에서 검색하려면 다음의 사항을 유의하자.
- 추적 창 도구 모음에서 Find버튼을 클릭한다.
- Find in Trace대화 상자에서 검색 기준을 지정한다. 일반적으로, 검색 조건을 적용할 수 있는 텍스트의 특정 부분, 주소 범위, 특정 주소 범위 내의 텍스트의 특정 부분처럼 결합된 조합에 대한 검색을 선택할 수 있다.
- 검색 기준을 지정했을 때, Find를 클릭한다. Find in Trace 윈도우가 표시되며, 추적 데이터의 분석을 시작할 수 있다.

6. 추적 데이터 검색
실행 기록을 따라 가려면 추적 창에서 단순히 보고 스크롤한다. 또는 브라우저 모드(browse mode)로 진입할 수 있다. 브라우저 모드로 진입하려면 추적 창에서 아이템을 더블 클릭하거나 Browse 도구 모음 버튼을 클릭하자.
선택한 항목은 노란색으로 변하고 소스와 디스어셈블리 창의해당 위치는 강조 표시된다. 이제 상하 화살표 키, 또는 스크롤하여 추적 데이터에서 이동할 수 있다. 그리고 클릭하면 소스 및 디스어셈블리 창에서 해당 위치의 내용이 표시된다. 실행 기록을 통해 전후 방향으로 스텝핑하는 것과 같다. 다시 더블 클릭하면 브라우저 모드를 종료한다.


그림 7.
Timeline window with Call Stack graph



그림 8.
Timeline window with Data Log graph


 

추적에 대한 참조 정보

1. ETM Trace Settings dialog box(I-jet/JTAGjet)
ETM 추적 설정 대화 상자는 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 1). ETM 추적 생성 및 컬렉션을 구성하려면 이 대화 상자를 사용한다.

2. ETM Trace Settings dialog box(J-Link/J-Trace)
ETM 추적 설정 대화 상자는 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 2). ETM 추적 생성 및 컬렉션을 구성하려면 이 대화 상자를 사용한다.

3. SWO Trace Window Settings dialog box
SWO 추적 창 설정 대화 상자는 I-jet/JTAGjet 메뉴에서 사용할 수 있다. 각각 J-Link 메뉴 나 ST-Link 메뉴는 SWO 추적 윈도우 툴바에서도 선택 가능하다(그림 3). SWO 추적 창에 표시하려는 내용을 지정하려면 이 대화 상자를 사용한다. 또한 추적 데이터의 생성을 구성할 필요가 있으면, SWOConfiguration을 클릭하자.

4. SWO Configuration dialog box
SWO 구성 대화 상자는 C-SPY 드라이버 메뉴에서 사용할 수 있으며, SWO Trace Window Settings 대화 상자에서도 사용할 수 있다(그림 4). serial-wire output(SWO) 통신 채널과 추적 데이터의 하드웨어 생성을 구성하려면 이 대화 상자를 사용하자.

5. Trace window
추적 창은 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 5). 이 창은 수집된 추적 데이터를 표시한다. 추적 창은 사용중인 C-SPY 드라이버에 따라 달라진다. 사용중인 C-SPY 드라이버 및 디버그 프로브의 추적 지원에 따라 다르다. 이 그림은 C-SPY 시뮬레이터를 반영한다.

6. Function Trace window
함수 추적 윈도우는 디버그 세션동안 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 6). 이 창은 추적 윈도우에 표시되는 추적 데이터의 하위 집합을 표시한다. 모든 행을 표시하는 대신에 함수 추적 창은 함수의 호출과 리턴에 대응하는 추적 데이터만을 표시한다.



그림 9.
Timeline window with Event Log graph

 

7. Timeline window
타임 라인 윈도우는 디버그 세션 동안 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 7~11). 사용하는 디버그 프로브, 그리고 C-SPY 드라이버, 하드웨어의 능력에 따라 이 창은 공통 시간 축에 관련하여 서로 다른 그래프의 추적 데이터를 표시한다.

그래프를 표시하려면 다음의 사항을 유의하자.
- SWO Configuration대화 상자를 열기 위해 C-SPYdriver>SWO Configuration을 선택한다. CPU 클럭 옵션은 응용 프로그램에 의해 설정된 CPU 클럭 값과 동일한 값으로 설정한다. SWO clock을 설정과 디버그 프로브에 정확한 데이터를 전송을 위해 필요하다. C-SPY 시뮬레이터를 사용하는 경우 이 단계를 무시할 수 있다.
- 타임 라인 창을 열기 위해 C-SPY 드라이버 메뉴에서 timeline을 선택한다.
- 타임 라인 창에서 특정 그래프를 사용하려면, 그래프 영역을 클릭하고 컨텍스트 메뉴에서 Enable을 선택한다.
- 데이터 로그 그래프의 경우, 타임 라인 윈도우에서의 그래픽 표현을 원하는 각 변수의 데이터 로그 중단점을 설정해야 한다.
- 이벤트 로그 그래프에 있어서는 이벤트 로그가 생성되고 싶은 응용 프로그램 소스 코드에 선처리기 매크로를 추가해야 한다.
- 응용 프로그램 실행을 시작하기위해 도구 모음에서 Go를 클릭한다. 그래프가 나타난다. 그래프에서 탐색하려면 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 확대/축소를 사용하는 방법, 그래프에서 마우스 오른쪽 버튼을 클릭하고 컨텍스트 메뉴에서 이동을 선택하고 적절한 명령은 그래프에서 앞뒤로 이동시키는 방법, 관심 샘플을 두 번 클릭하고 해당 소스 코드는 편집기 창 및 디스어셈블리 창에서 강조되는 방법, 그래프를 클릭하고 시간 간격을 선택 드래그한다. Enter 키를 누르거나 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 Zoom>Zoom to Selection을 선택하는 방법 중에서 하나를 사용하자.



그림 10.
Timeline window with Interrupt Log graph





그림 11.
Timeline window with Power Log graph


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