PowerTRACE 활용한 차량용 SW 디버깅가이드

TRACE32
Admin (토론 | 기여) 사용자의 2015년 4월 24일 (금) 11:19 판

(비교) ← 이전 판 | 최신판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 검색

"PowerTRACE 활용한 차량용 SW 디버깅가이드"에 대한 답변입니다.


변수 로깅

Break point를 이용해 특정 변수의 값의 변화를 관찰 할 수 있다. Break point는 onchip에서 제공하는 갯수 만큼 사용 가능 하며, 프로그램 flow trace(BTM)를 disable하면 변수 로깅 시간을 늘릴 수 있다.

변수 로깅 설정 하기

Break point 설정
 

- 명령어로 설정 하려면 아래와 같은 순서로 실행 한다.

B::trace.init

B::v.break.set <var_name> /write /tracedata

B::nexus.btm.off

  B::trace.list

B::go

- GUI로 설정  : 아래와 같이 설정 후 타겟을 실행 시킨다.

타겟 실행이 멈춘 후Traced data 확인

- address : 변수의 주소

- cycle : wr-long, long 크기(32bit)로 write됨

- data : write된 값

- symbol : 변수의 심볼 정보

- ti.back : 변수에 값이 write된 interval time

 

Traced data를 기반으로 find기능 활용 하기

Ex – 0x100값이 write된 경우 찾기

B::trace.find cycle.write data.l 0x100


 

로깅된 변수의 값의 변화를 그래프로 관찰 하기

 B:: trace.draw data.l /filter address stat1



코드 수행 시간 측정 및 결과 확인

TRACE 및 Nexus 환경 설정

- 명령어를 이용한 설정 방법

           B::trace.method.ANALYZER

           B::nexus.on

           B::nexus.btm.on

 

- trace설정이 마무리 되면 타겟을 실행 하고 trace를 종료할 시점에 타겟을 멈춘다

- Traced data 확인


Trace.chart.symbol window를 이용해 인터럽트 수행 interval 시간 측정 하기

- 측정 하고자 하는 시작 위치에 마우스 우클릭 후 “Set Zero” 설정

- 측정 하고자 하는 종료 위치에 마우스 클릭 후 팝업 창에서 C-Z 값을 확인

프로그램 수행 시간에 대한 통계 확인 하기

- B::Trace.statistic.func : 함수 기준 정보 출력

- B::trace.statistic.symbol : 심볼 기준 정보 출력

- address : 함수 정보. 만일 심볼이 제공되지 않는 영역의 코드가 실행되면, (other)로 귀속된다.

- total : 총 호출 된 횟수

- min : 최소 수행 시간

- max : 최대 수행 시간

- avr : 평균 수행 시간

- ratio : cpu 점유율

 

OS기반의 TRACE

Awareness 적용

차량용 OS로 주로 사용되는 OSEK/AUTOSAR의 경우 ORTI파일을 이용해 TRACE32에서 커널의 정보를 쉽게 파악 할 수 있다.

- B::task.orti ”file_name.ort” 명령어를 실행하여 적용

Task Switching 정보

TASK 실행 통계 정보

 

 CTS(Context Tracking System) 기능 활용

프로그램 수행 중 오류가 발생 되었을 경우 오류를 발생 시킨 원인이 되는 문제를 찾는데 유용하며, 프로그램 flow와 변수 및 data의 변화를 함께 관찰하는 것이 가능 하다.

CTS기능 실행 방법

- 프로그램이 오류가 발생 될 때까지 실행 한 후 타겟을 멈춘다.

- Data.list, trace.chart.symbol, trace.list 윈도우를 /track 옵션 적용 하여 실행

  B::data.list /track

  B::trace.symbol.chart /track

  B::trac.list /track

- /track 옵션 적용을 적용하면 적용된 윈도우들은 같은 위치를 가리키게 된다.

- Trace.list나 trace.chart.symbol 중 디버깅을 시작 할 위치를 찾은 후 아래와 같이 CTS기능을 활성화 시킨다.

- CTS가 실행 되면 TRACE32의 상태 정보와 data.list 윈도우의 창이 노란색으로 바뀐다. Data.list윈도우의 상단 버튼을 이용하거나 팝업 메뉴의 go till, go back till 기능을 이용하여 분석 및 디버깅을 하면 된다.


- CTS를 활용하여 디버깅 중 관찰 하고자 하는 변수가 있다면 Var.Watch 윈도우에 등록하여 프로그램 수행 중 바뀐 값을 확인할 수 있다

 

Code Coverage

- Code Coverage는 trace data를 기반으로 코드의 실행 유무를 보여준다.

실행 방법

- B::Coverage.ListFunc 실행 후 Add를 클릭하여 trace data를 coverage 정보로 변환 한다.

- Tree를 확장하여 세부 정보를 확인 할 수 있고, 더블 클릭하면 실행 된 소스와 실행 안된 소스를 구분하여 보여 준다.(흰색 : 실행 됨, 노란색 : 실행 안됨)

 

PowerOff(reset) 디버깅

- 예상되지 않는 리셋이 발생 되는 경우 리셋이 발생되어 타겟과 디버그 연결이 끊어지더라도 이미 저장된 trace data를 기반으로 디버깅 할 수 있다.

TRACE32 설정 하기

- /vm 옵션을 적용하여 실행파일(.elf)을 다시 로드 한다.

- TRACE 설정에서 ACCESS를 VM으로 설정

- 문제가 재연 될 때 까지 타겟을 실행 시키고, 리셋이 발생 되면 다음과 같이 디버그 연결이 해제된다.

- 디버그 연결이 해제 되더라도 trace 정보는 남아 있으며 trace.chart.symbol 윈도우나 CTS기능을 활용하여 리셋이 된 원인을 디버깅 한다

 

TRACE data의 저장과 simulator를 이용한 분석

- ELF파일과 저장된 trace data를 이용하여 PowerTRACE가 연결이 되어 있지 않더라도 디버깅이 가능 하다. 따라서 문제 상황의 trace data를 저장하여 여럿이 동시에 분석 할 수 있다.

Trace data 저장하기 – trace.save 명령 이용

- 저장이 완료되면 지정된 경로에 저장된 파일을 확인 할 수 있다.

Trace data를 simulator에서 복원 하기

- T32start.exe(C:\T32\bin\windows\T32start.exe) 유틸을 실행

- T32start 유틸에서 시뮬레이터를 생성하고 코어를 선택한 후 실행 한다

- 시뮬레이터가 실행되면 아래 명령어를 실행하여 trace data와 elf파일을 로드 한다. elf파일을 로드할 시 유의 사항은 반드시 trace data를 저장했을 때 사용했던 elf파일을 사용해야 한다.

  B::system.cpu mpc5676r            ;CPU 선택

  B::system.mode.up                  ;debug mode실행

  B::trace.load C:\T32\bin\trace_dump.bin ;trace data 로드

  B::data.load.elf .../internal_flash.elf                     ;심볼 로드

- 위 과정이 마무리 되면 simulator에서도 trace기능을 활용 하여 디버깅 하면 된다.

 

 

 

TRACE32 FAQ 홈으로 가기