"PowerTRACE 활용한 차량용 SW 디버깅가이드"의 두 판 사이의 차이

TRACE32
이동: 둘러보기, 검색
(새 문서: <p><strong><span style="font-size: large;">"PowerTRACE 활용한 차량용 SW 디버깅가이드"에 대한 답변입니다.</span></strong></p> <p><span style="font-size: medium;"><s...)
 
 
12번째 줄: 12번째 줄:
 
<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;"><span style="white-space: pre;"><span style="white-space: pre;"> </span> </span>B::go</span></p>
 
<p><span style="font-size: small;">- GUI로 설정 &nbsp;: 아래와 같이 설정 후 타겟을 실행 시킨다.</span></p>
 
<p><span style="font-size: small;">- GUI로 설정 &nbsp;: 아래와 같이 설정 후 타겟을 실행 시킨다.</span></p>
<p><img style="width: 660px; height: 516px;" src="/data/wiki/2015-02-16/1424053040.jpg" alt="" width="917" height="706" /></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><strong style="font-size: 1em;"><span style="font-size: small;">타겟 실행이 멈춘 후Traced data 확인</span></strong></p>
<p><img style="width: 652px; height: 222px;" src="/data/wiki/2015-02-16/1424049738.jpg" alt="" width="792" height="304" /></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;">- address : 변수의 주소</span></p>
 
<p><span style="font-size: small;">- cycle : wr-long, long 크기(32bit)로 write됨</span></p>
 
<p><span style="font-size: small;">- cycle : wr-long, long 크기(32bit)로 write됨</span></p>
24번째 줄: 24번째 줄:
 
<p><span style="font-size: small;">Ex &ndash; 0x100값이 write된 경우 찾기</span></p>
 
<p><span style="font-size: small;">Ex &ndash; 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;">B::trace.find cycle.write data.l 0x100</span></p>
<p><span style="font-size: small;"><img style="width: 753px; height: 236px;" src="/data/wiki/2015-02-16/1424050058.jpg" alt="" width="888" height="317" /><br /></span></p>
+
<p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424050058.jpg" alt="" width="680" /><br /></span></p>
 
&nbsp;
 
&nbsp;
 
<h4><strong><span style="font-size: small;">로깅된 변수의 값의 변화를 그래프로 관찰 하기</span></strong></h4>
 
<h4><strong><span style="font-size: small;">로깅된 변수의 값의 변화를 그래프로 관찰 하기</span></strong></h4>
 
<p><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">B:: trace.draw data.l /filter address stat1</span></p>
 
<p><span style="font-size: small;">&nbsp;</span><span style="font-size: small;">B:: trace.draw data.l /filter address stat1</span></p>
<p><span style="font-size: small;"><img style="width: 555px; height: 285px;" src="/data/wiki/2015-02-16/1424050078.png" alt="" width="668" height="380" /><br /></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>
 
<p><span style="font-size: small;"><br /></span></p>
 
<h2><strong><span style="font-size: large;">코드 수행 시간 측정 및 결과 확인</span></strong></h2>
 
<h2><strong><span style="font-size: large;">코드 수행 시간 측정 및 결과 확인</span></strong></h2>
 
<h3><strong><span style="font-size: small;">TRACE 및 Nexus 환경 설정</span></strong></h3>
 
<h3><strong><span style="font-size: small;">TRACE 및 Nexus 환경 설정</span></strong></h3>
<p><img style="width: 469px; height: 363px;" src="/data/wiki/2015-02-16/1424050200.png" alt="" width="597" height="503" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424050200.png" alt="" width="550" /></p>
<p><img style="width: 468px; height: 256px;" src="/data/wiki/2015-02-16/1424050207.png" alt="" width="592" height="368" /></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;">- 명령어를 이용한 설정 방법</span></p>
 
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B::trace.method.ANALYZER</span></p>
 
<p><span style="font-size: small;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; B::trace.method.ANALYZER</span></p>
41번째 줄: 41번째 줄:
 
<p><span style="font-size: small;">- trace설정이 마무리 되면 타겟을 실행 하고 trace를 종료할 시점에 타겟을 멈춘다</span></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;">- Traced data 확인</span></p>
<p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424050383.jpg" alt="" /><br /></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>
 
<h4><strong><span style="font-size: small;">Trace.chart.symbol window를 이용해 인터럽트 수행 interval 시간 측정 하기</span></strong></h4>
 
<p><span style="font-size: small;">- 측정 하고자 하는 시작 위치에 마우스 우클릭 후 &ldquo;Set Zero&rdquo; 설정</span></p>
 
<p><span style="font-size: small;">- 측정 하고자 하는 시작 위치에 마우스 우클릭 후 &ldquo;Set Zero&rdquo; 설정</span></p>
<p><img style="width: 400px; height: 207px;" src="/data/wiki/2015-02-16/1424051170.jpg" alt="" width="379" height="218" /></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><span style="font-size: small;">- 측정 하고자 하는 종료 위치에 마우스 클릭 후 팝업 창에서 C-Z 값을 확인</span></p>
<p><img style="width: 410px; height: 179px;" src="/data/wiki/2015-02-16/1424051181.jpg" alt="" width="380" height="145" /></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>
 
<h4><strong><span style="font-size: small;">프로그램 수행 시간에 대한 통계 확인 하기</span></strong></h4>
<p><img style="width: 745px; height: 339px;" src="/data/wiki/2015-02-16/1424051218.png" alt="" width="982" height="459" /></p>
+
<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.func : 함수 기준 정보 출력</span></p>
 
<p><span style="font-size: small;">- B::trace.statistic.symbol : 심볼 기준 정보 출력</span></p>
 
<p><span style="font-size: small;">- B::trace.statistic.symbol : 심볼 기준 정보 출력</span></p>
63번째 줄: 63번째 줄:
 
<p><span style="font-size: small;">- B::task.orti &rdquo;file_name.ort&rdquo; 명령어를 실행하여 적용</span></p>
 
<p><span style="font-size: small;">- B::task.orti &rdquo;file_name.ort&rdquo; 명령어를 실행하여 적용</span></p>
 
<h3><strong><span style="font-size: small;">Task Switching 정보</span></strong></h3>
 
<h3><strong><span style="font-size: small;">Task Switching 정보</span></strong></h3>
<p><img style="width: 724px; height: 154px;" src="/data/wiki/2015-02-16/1424051354.png" alt="" width="981" height="179" /></p>
+
<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>
 
<h3><strong><span style="font-size: small;">TASK 실행 통계 정보</span></strong></h3>
<p><img style="width: 726px; height: 131px;" src="/data/wiki/2015-02-16/1424051367.png" alt="" width="981" height="203" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424051367.png" alt="" width="800" /></p>
 
<p><span style="font-size: small;"><strong>&nbsp;</strong></span></p>
 
<p><span style="font-size: small;"><strong>&nbsp;</strong></span></p>
 
<h2><span style="font-size: small;"><strong>&nbsp;</strong></span><span style="font-size: large;">CTS(Context Tracking System) 기능 활용</span></h2>
 
<h2><span style="font-size: small;"><strong>&nbsp;</strong></span><span style="font-size: large;">CTS(Context Tracking System) 기능 활용</span></h2>
77번째 줄: 77번째 줄:
 
<p><span style="font-size: small;">- /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><span style="font-size: small;">- Trace.list나 trace.chart.symbol 중 디버깅을 시작 할 위치를 찾은 후 아래와 같이 CTS기능을 활성화 시킨다.</span></p>
<p><img style="width: 816px; height: 514px;" src="/data/wiki/2015-02-16/1424051579.jpg" alt="" width="882" height="614" /></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;">- CTS가 실행 되면 TRACE32의 상태 정보와 data.list 윈도우의 창이 노란색으로 바뀐다. Data.list윈도우의 상단 버튼을 이용하거나 팝업 메뉴의 go till, go back till 기능을 이용하여 분석 및 디버깅을 하면 된다.</span></p>
<p><span style="font-size: small;"><img style="width: 1245px; height: 690px;" src="/data/wiki/2015-02-16/1424051645.png" alt="" width="1692" height="1063" /><br /></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><span style="font-size: small;">- CTS를 활용하여 디버깅 중 관찰 하고자 하는 변수가 있다면 Var.Watch 윈도우에 등록하여 프로그램 수행 중 바뀐 값을 확인할 수 있다</span></p>
<p><img src="/data/wiki/2015-02-16/1424051710.jpg" alt="" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424051710.jpg" alt="" width="800" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<h2><strong><span style="font-size: large;">Code Coverage</span></strong></h2>
 
<h2><strong><span style="font-size: large;">Code Coverage</span></strong></h2>
87번째 줄: 87번째 줄:
 
<h3><strong><span style="font-size: small;">실행 방법</span></strong></h3>
 
<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><span style="font-size: small;">- B::Coverage.ListFunc 실행 후 Add를 클릭하여 trace data를 coverage 정보로 변환 한다.</span></p>
<p><img style="width: 726px; height: 290px;" src="/data/wiki/2015-02-16/1424051797.png" alt="" width="958" height="428" /></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><span style="font-size: small;">- Tree를 확장하여 세부 정보를 확인 할 수 있고, 더블 클릭하면 실행 된 소스와 실행 안된 소스를 구분하여 보여 준다.(흰색 : 실행 됨, 노란색 : 실행 안됨)</span></p>
<p><img style="width: 716px; height: 592px;" src="/data/wiki/2015-02-16/1424051812.png" alt="" width="911" height="772" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424051812.png" alt="" width="800" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<h2><strong><span style="font-size: large;">PowerOff(reset) 디버깅</span></strong></h2>
 
<h2><strong><span style="font-size: large;">PowerOff(reset) 디버깅</span></strong></h2>
95번째 줄: 95번째 줄:
 
<h3><strong><span style="font-size: small;">TRACE32 설정 하기</span></strong></h3>
 
<h3><strong><span style="font-size: small;">TRACE32 설정 하기</span></strong></h3>
 
<p><span style="font-size: small;">- /vm 옵션을 적용하여 실행파일(.elf)을 다시 로드 한다.</span></p>
 
<p><span style="font-size: small;">- /vm 옵션을 적용하여 실행파일(.elf)을 다시 로드 한다.</span></p>
<p><img style="width: 407px; height: 84px;" src="/data/wiki/2015-02-16/1424051924.jpg" alt="" width="790" height="196" /></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><span style="font-size: small;">- TRACE 설정에서 ACCESS를 VM으로 설정</span></p>
<p><img style="width: 493px; height: 434px;" src="/data/wiki/2015-02-16/1424051962.jpg" alt="" width="843" height="667" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424051962.jpg" alt="" width="550" /></p>
 
<p><span style="font-size: small;">- 문제가 재연 될 때 까지 타겟을 실행 시키고, 리셋이 발생 되면 다음과 같이 디버그 연결이 해제된다.</span></p>
 
<p><span style="font-size: small;">- 문제가 재연 될 때 까지 타겟을 실행 시키고, 리셋이 발생 되면 다음과 같이 디버그 연결이 해제된다.</span></p>
<p><img style="width: 730px; height: 439px;" src="/data/wiki/2015-02-16/1424051986.png" alt="" width="1140" height="659" /></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><span style="font-size: small;">- 디버그 연결이 해제 되더라도 trace 정보는 남아 있으며 trace.chart.symbol 윈도우나 CTS기능을 활용하여 리셋이 된 원인을 디버깅 한다</span></p>
<p><img style="width: 673px; height: 351px;" src="/data/wiki/2015-02-16/1424052077.jpg" alt="" width="1178" height="668" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424052077.jpg" alt="" width="550" /></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<h2><strong><span style="font-size: large;">TRACE data의 저장과 simulator를 이용한 분석</span></strong></h2>
 
<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>
 
<p><span style="font-size: small;">- ELF파일과 저장된 trace data를 이용하여 PowerTRACE가 연결이 되어 있지 않더라도 디버깅이 가능 하다. 따라서 문제 상황의 trace data를 저장하여 여럿이 동시에 분석 할 수 있다.</span></p>
 
<h3><strong><span style="font-size: small;">Trace data 저장하기 &ndash; trace.save 명령 이용</span></strong></h3>
 
<h3><strong><span style="font-size: small;">Trace data 저장하기 &ndash; trace.save 명령 이용</span></strong></h3>
<p><img style="width: 741px; height: 404px;" src="/data/wiki/2015-02-16/1424052127.png" alt="" width="1141" height="652" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424052127.png" alt="" width="550" /></p>
 
<p><span style="font-size: small;">- 저장이 완료되면 지정된 경로에 저장된 파일을 확인 할 수 있다.</span></p>
 
<p><span style="font-size: small;">- 저장이 완료되면 지정된 경로에 저장된 파일을 확인 할 수 있다.</span></p>
<p><img style="width: 522px; height: 191px;" src="/data/wiki/2015-02-16/1424052157.png" alt="" width="822" height="306" /></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>
 
<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.exe(C:\T32\bin\windows\T32start.exe) 유틸을 실행</span></p>
 
<p><span style="font-size: small;">- T32start 유틸에서 시뮬레이터를 생성하고 코어를 선택한 후 실행 한다</span></p>
 
<p><span style="font-size: small;">- T32start 유틸에서 시뮬레이터를 생성하고 코어를 선택한 후 실행 한다</span></p>
<p><img style="width: 724px; height: 317px;" src="/data/wiki/2015-02-16/1424052253.jpg" alt="" width="1264" height="614" /></p>
+
<p><img src="/data/wiki/2015-02-16/1424052253.jpg" alt="" width="800" /></p>
<p><img style="width: 727px; height: 331px;" src="/data/wiki/2015-02-16/1424052257.jpg" alt="" width="1255" height="591" /></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;">- 시뮬레이터가 실행되면 아래 명령어를 실행하여 trace data와 elf파일을 로드 한다. elf파일을 로드할 시 유의 사항은 <strong>반드시 trace data를 저장했을 때 사용했던 elf파일을 사용해야 한다.</strong></span></p>
 
<p><span style="font-size: small;">&nbsp; B::system.cpu mpc5676r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;CPU 선택</span></p>
 
<p><span style="font-size: small;">&nbsp; B::system.cpu mpc5676r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;CPU 선택</span></p>
120번째 줄: 120번째 줄:
 
<p><span style="font-size: small;">&nbsp; B::data.load.elf .../internal_flash.elf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;심볼 로드</span></p>
 
<p><span style="font-size: small;">&nbsp; B::data.load.elf .../internal_flash.elf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;심볼 로드</span></p>
 
<p><span style="font-size: small;">- 위 과정이 마무리 되면 simulator에서도 trace기능을 활용 하여 디버깅 하면 된다.</span></p>
 
<p><span style="font-size: small;">- 위 과정이 마무리 되면 simulator에서도 trace기능을 활용 하여 디버깅 하면 된다.</span></p>
<p><span style="font-size: small;"><img style="width: 645px; height: 417px;" src="/data/wiki/2015-02-16/1424052318.png" alt="" width="917" height="656" /></span></p>
+
<p><span style="font-size: small;"><img src="/data/wiki/2015-02-16/1424052318.png" alt="" width="550" /></span></p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p>&nbsp;</p>
 
<p><span style="font-size: small;"><strong><span><a href="/wiki/index.php/TRACE32_FAQ">TRACE32 FAQ&nbsp;홈으로 가기</a></span></strong><br /></span></p>
 
<p><span style="font-size: small;"><strong><span><a href="/wiki/index.php/TRACE32_FAQ">TRACE32 FAQ&nbsp;홈으로 가기</a></span></strong><br /></span></p>

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 홈으로 가기