MDSTECH
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객지원
뉴스레터
Q&A
FAQ
원격지원
검색창
검색버튼
회원가입
로그인
TRACE32
TRACE32 Solution
TRACE32 Trace Solution
TRACE32 More Product
TRACE32 Software Solution
Why TRACE32?
교육신청
정규교육
교육과정 안내
교육장 안내
교육설문
자료실
TRACE32 소프트웨어
TRACE32 매뉴얼
iTSP
TRACE32 영상
인증서
고객 지원
뉴스레터
Q&A
FAQ
원격지원
사이트맵 보기
PowerTRACE 활용한 차량용 SW 디버깅가이드 문서 원본 보기
←
PowerTRACE 활용한 차량용 SW 디버깅가이드
이동:
둘러보기
,
검색
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게만 가능합니다:
사용자
문서의 원본을 보거나 복사할 수 있습니다:
<p><strong><span style="font-size: large;">"PowerTRACE 활용한 차량용 SW 디버깅가이드"에 대한 답변입니다.</span></strong></p> <p><span style="font-size: medium;"><strong><span><br /></span></strong></span></p> <h2><strong><span style="font-size: large;">변수 로깅</span></strong></h2> <p><span style="font-size: small;">Break point를 이용해 특정 변수의 값의 변화를 관찰 할 수 있다. Break point는 onchip에서 제공하는 갯수 만큼 사용 가능 하며, 프로그램 flow trace(BTM)를 disable하면 변수 로깅 시간을 늘릴 수 있다.</span></p> <h3><strong><span style="font-size: small;">변수 로깅 설정 하기</span></strong></h3> <h4><strong><span style="font-size: small;">Break point 설정</span></strong><br /><span style="font-size: small;"> </span></h4> <p><span style="font-size: small;">- 명령어로 설정 하려면 아래와 같은 순서로 실행 한다.</span></p> <p><span style="font-size: small;"><span style="white-space: pre;"><span style="white-space: pre;"> </span> </span>B::trace.init</span></p> <p><span style="font-size: small;"><span style="white-space: pre;"><span style="white-space: pre;"> </span> </span>B::v.break.set <var_name> /write /tracedata</span></p> <p><span style="font-size: small;"><span style="white-space: pre;"><span style="white-space: pre;"> </span> </span>B::nexus.btm.off</span></p> <p><span style="font-size: small;"> B::trace.list</span></p> <p><span style="font-size: small;"><span style="white-space: pre;"><span style="white-space: pre;"> </span> </span>B::go</span></p> <p><span style="font-size: small;">- GUI로 설정 : 아래와 같이 설정 후 타겟을 실행 시킨다.</span></p> <p><img src="/data/wiki/2015-02-16/1424053040.jpg" alt="" width="800" /></p> <p><strong style="font-size: 1em;"><span style="font-size: small;">타겟 실행이 멈춘 후Traced data 확인</span></strong></p> <p><img src="/data/wiki/2015-02-16/1424049738.jpg" alt="" width="680" /></p> <p><span style="font-size: small;">- address : 변수의 주소</span></p> <p><span style="font-size: small;">- cycle : wr-long, long 크기(32bit)로 write됨</span></p> <p><span style="font-size: small;">- data : write된 값</span></p> <p><span style="font-size: small;">- symbol : 변수의 심볼 정보</span></p> <p><span style="font-size: small;">- ti.back : 변수에 값이 write된 interval time</span></p> <h4><span style="font-size: small;"><strong>Traced data</strong><strong>를 기반으로 find기능 활용 하기</strong></span></h4> <p><span style="font-size: small;">Ex – 0x100값이 write된 경우 찾기</span></p> <p><span style="font-size: small;">B::trace.find cycle.write data.l 0x100</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424050058.jpg" alt="" width="680" /><br /></span></p> <h4><strong><span style="font-size: small;">로깅된 변수의 값의 변화를 그래프로 관찰 하기</span></strong></h4> <p><span style="font-size: small;"> </span><span style="font-size: small;">B:: trace.draw data.l /filter address stat1</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424050078.png" alt="" width="550" /><br /></span></p> <p><span style="font-size: small;"><br /></span></p> <h2><strong><span style="font-size: large;">코드 수행 시간 측정 및 결과 확인</span></strong></h2> <h3><strong><span style="font-size: small;">TRACE 및 Nexus 환경 설정</span></strong></h3> <p><img src="/data/wiki/2015-02-16/1424050200.png" alt="" width="550" /></p> <p><img src="/data/wiki/2015-02-16/1424050207.png" alt="" width="550" /></p> <p><span style="font-size: small;">- 명령어를 이용한 설정 방법</span></p> <p><span style="font-size: small;"> B::trace.method.ANALYZER</span></p> <p><span style="font-size: small;"> B::nexus.on</span></p> <p><span style="font-size: small;"> B::nexus.btm.on</span></p> <p> </p> <p><span style="font-size: small;">- trace설정이 마무리 되면 타겟을 실행 하고 trace를 종료할 시점에 타겟을 멈춘다</span></p> <p><span style="font-size: small;">- Traced data 확인</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424050383.jpg" alt="" width="550" /><br /></span></p> <h4><strong><span style="font-size: small;">Trace.chart.symbol window를 이용해 인터럽트 수행 interval 시간 측정 하기</span></strong></h4> <p><span style="font-size: small;">- 측정 하고자 하는 시작 위치에 마우스 우클릭 후 “Set Zero” 설정</span></p> <p><img src="/data/wiki/2015-02-16/1424051170.jpg" alt="" width="400" /></p> <p><span style="font-size: small;">- 측정 하고자 하는 종료 위치에 마우스 클릭 후 팝업 창에서 C-Z 값을 확인</span></p> <p><img src="/data/wiki/2015-02-16/1424051181.jpg" alt="" width="400" /></p> <h4><strong><span style="font-size: small;">프로그램 수행 시간에 대한 통계 확인 하기</span></strong></h4> <p><img src="/data/wiki/2015-02-16/1424051218.png" alt="" width="800" /></p> <p><span style="font-size: small;">- B::Trace.statistic.func : 함수 기준 정보 출력</span></p> <p><span style="font-size: small;">- B::trace.statistic.symbol : 심볼 기준 정보 출력</span></p> <p><span style="font-size: small;">- address : 함수 정보. 만일 심볼이 제공되지 않는 영역의 코드가 실행되면, (other)로 귀속된다.</span></p> <p><span style="font-size: small;">- total : 총 호출 된 횟수</span></p> <p><span style="font-size: small;">- min : 최소 수행 시간</span></p> <p><span style="font-size: small;">- max : 최대 수행 시간</span></p> <p><span style="font-size: small;">- avr : 평균 수행 시간</span></p> <p><span style="font-size: small;">- ratio : cpu 점유율</span></p> <p> </p> <h2><strong><span style="font-size: large;">OS기반의 TRACE</span></strong></h2> <h3><strong><span style="font-size: small;">Awareness 적용</span></strong></h3> <p><span style="font-size: small;">차량용 OS로 주로 사용되는 OSEK/AUTOSAR의 경우 ORTI파일을 이용해 TRACE32에서 커널의 정보를 쉽게 파악 할 수 있다.</span></p> <p><span style="font-size: small;">- B::task.orti ”file_name.ort” 명령어를 실행하여 적용</span></p> <h3><strong><span style="font-size: small;">Task Switching 정보</span></strong></h3> <p><img src="/data/wiki/2015-02-16/1424051354.png" alt="" width="800" /></p> <h3><strong><span style="font-size: small;">TASK 실행 통계 정보</span></strong></h3> <p><img src="/data/wiki/2015-02-16/1424051367.png" alt="" width="800" /></p> <p><span style="font-size: small;"><strong> </strong></span></p> <h2><span style="font-size: small;"><strong> </strong></span><span style="font-size: large;">CTS(Context Tracking System) 기능 활용</span></h2> <p><span style="font-size: small;">프로그램 수행 중 오류가 발생 되었을 경우 오류를 발생 시킨 원인이 되는 문제를 찾는데 유용하며, 프로그램 flow와 변수 및 data의 변화를 함께 관찰하는 것이 가능 하다.</span></p> <h3><strong><span style="font-size: small;">CTS기능 실행 방법</span></strong></h3> <p><span style="font-size: small;">- 프로그램이 오류가 발생 될 때까지 실행 한 후 타겟을 멈춘다.</span></p> <p><span style="font-size: small;">- Data.list, trace.chart.symbol, trace.list 윈도우를 /track 옵션 적용 하여 실행</span></p> <p><span style="font-size: small;"> B::data.list /track</span></p> <p><span style="font-size: small;"> B::trace.symbol.chart /track</span></p> <p><span style="font-size: small;"> B::trac.list /track</span></p> <p><span style="font-size: small;">- /track 옵션 적용을 적용하면 적용된 윈도우들은 같은 위치를 가리키게 된다.</span></p> <p><span style="font-size: small;">- Trace.list나 trace.chart.symbol 중 디버깅을 시작 할 위치를 찾은 후 아래와 같이 CTS기능을 활성화 시킨다.</span></p> <p><img src="/data/wiki/2015-02-16/1424051579.jpg" alt="" width="800" /></p> <p><span style="font-size: small;">- CTS가 실행 되면 TRACE32의 상태 정보와 data.list 윈도우의 창이 노란색으로 바뀐다. Data.list윈도우의 상단 버튼을 이용하거나 팝업 메뉴의 go till, go back till 기능을 이용하여 분석 및 디버깅을 하면 된다.</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424051645.png" alt="" width="800" /><br /></span></p> <p><span style="font-size: small;">- CTS를 활용하여 디버깅 중 관찰 하고자 하는 변수가 있다면 Var.Watch 윈도우에 등록하여 프로그램 수행 중 바뀐 값을 확인할 수 있다</span></p> <p><img src="/data/wiki/2015-02-16/1424051710.jpg" alt="" width="800" /></p> <p> </p> <h2><strong><span style="font-size: large;">Code Coverage</span></strong></h2> <p><span style="font-size: small;">- Code Coverage는 trace data를 기반으로 코드의 실행 유무를 보여준다.</span></p> <h3><strong><span style="font-size: small;">실행 방법</span></strong></h3> <p><span style="font-size: small;">- B::Coverage.ListFunc 실행 후 Add를 클릭하여 trace data를 coverage 정보로 변환 한다.</span></p> <p><img src="/data/wiki/2015-02-16/1424051797.png" alt="" width="800" /></p> <p><span style="font-size: small;">- Tree를 확장하여 세부 정보를 확인 할 수 있고, 더블 클릭하면 실행 된 소스와 실행 안된 소스를 구분하여 보여 준다.(흰색 : 실행 됨, 노란색 : 실행 안됨)</span></p> <p><img src="/data/wiki/2015-02-16/1424051812.png" alt="" width="800" /></p> <p> </p> <h2><strong><span style="font-size: large;">PowerOff(reset) 디버깅</span></strong></h2> <p><span style="font-size: small;">- 예상되지 않는 리셋이 발생 되는 경우 리셋이 발생되어 타겟과 디버그 연결이 끊어지더라도 이미 저장된 trace data를 기반으로 디버깅 할 수 있다.</span></p> <h3><strong><span style="font-size: small;">TRACE32 설정 하기</span></strong></h3> <p><span style="font-size: small;">- /vm 옵션을 적용하여 실행파일(.elf)을 다시 로드 한다.</span></p> <p><img src="/data/wiki/2015-02-16/1424051924.jpg" alt="" width="550" /></p> <p><span style="font-size: small;">- TRACE 설정에서 ACCESS를 VM으로 설정</span></p> <p><img src="/data/wiki/2015-02-16/1424051962.jpg" alt="" width="550" /></p> <p><span style="font-size: small;">- 문제가 재연 될 때 까지 타겟을 실행 시키고, 리셋이 발생 되면 다음과 같이 디버그 연결이 해제된다.</span></p> <p><img src="/data/wiki/2015-02-16/1424051986.png" alt="" width="550" /></p> <p><span style="font-size: small;">- 디버그 연결이 해제 되더라도 trace 정보는 남아 있으며 trace.chart.symbol 윈도우나 CTS기능을 활용하여 리셋이 된 원인을 디버깅 한다</span></p> <p><img src="/data/wiki/2015-02-16/1424052077.jpg" alt="" width="550" /></p> <p> </p> <h2><strong><span style="font-size: large;">TRACE data의 저장과 simulator를 이용한 분석</span></strong></h2> <p><span style="font-size: small;">- ELF파일과 저장된 trace data를 이용하여 PowerTRACE가 연결이 되어 있지 않더라도 디버깅이 가능 하다. 따라서 문제 상황의 trace data를 저장하여 여럿이 동시에 분석 할 수 있다.</span></p> <h3><strong><span style="font-size: small;">Trace data 저장하기 – trace.save 명령 이용</span></strong></h3> <p><img src="/data/wiki/2015-02-16/1424052127.png" alt="" width="550" /></p> <p><span style="font-size: small;">- 저장이 완료되면 지정된 경로에 저장된 파일을 확인 할 수 있다.</span></p> <p><img src="/data/wiki/2015-02-16/1424052157.png" alt="" width="550" /></p> <h3><strong><span style="font-size: small;">Trace data를 simulator에서 복원 하기</span></strong></h3> <p><span style="font-size: small;">- T32start.exe(C:\T32\bin\windows\T32start.exe) 유틸을 실행</span></p> <p><span style="font-size: small;">- T32start 유틸에서 시뮬레이터를 생성하고 코어를 선택한 후 실행 한다</span></p> <p><img src="/data/wiki/2015-02-16/1424052253.jpg" alt="" width="800" /></p> <p><img src="/data/wiki/2015-02-16/1424052257.jpg" alt="" width="800" /></p> <p><span style="font-size: small;">- 시뮬레이터가 실행되면 아래 명령어를 실행하여 trace data와 elf파일을 로드 한다. elf파일을 로드할 시 유의 사항은 <strong>반드시 trace data를 저장했을 때 사용했던 elf파일을 사용해야 한다.</strong></span></p> <p><span style="font-size: small;"> B::system.cpu mpc5676r ;CPU 선택</span></p> <p><span style="font-size: small;"> B::system.mode.up ;debug mode실행</span></p> <p><span style="font-size: small;"> B::trace.load C:\T32\bin\trace_dump.bin ;trace data 로드</span></p> <p><span style="font-size: small;"> B::data.load.elf .../internal_flash.elf ;심볼 로드</span></p> <p><span style="font-size: small;">- 위 과정이 마무리 되면 simulator에서도 trace기능을 활용 하여 디버깅 하면 된다.</span></p> <p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424052318.png" alt="" width="550" /></span></p> <p> </p> <p> </p> <p> </p> <p><span style="font-size: small;"><strong><span><a href="/wiki/index.php/TRACE32_FAQ">TRACE32 FAQ 홈으로 가기</a></span></strong><br /></span></p>
PowerTRACE 활용한 차량용 SW 디버깅가이드
문서로 돌아갑니다.
둘러보기 메뉴
개인 도구
로그인
이름공간
문서
토론
변수
보기
읽기
원본 보기
역사 보기
행위
검색
TRACE32 Dummy
TRACE32
iTSP User's Guide
aTSP User's Guide
Linux Debugging
Debugging Tips
Trace Analysis
Virtual Target
TRACE32로 바라본 ARM
TRACE32 FAQ
TRACE32 Trouble Shooting
TRACE32 Software Update
Software Revision History
DT10 / DT-Win
다운로드
DT10 Evaluation
DT-Win Evaluation
TestPoint 삽입 Error
Build Error
DT10 FAQ
도구
여기를 가리키는 문서
가리키는 글의 바뀜
특수 문서 목록
문서 정보