사이트맵 보기

활용사례

[이벤트 - 디버깅 경험 수상작] 로컬 변수에 Breakpoint 활용 디버깅

작성자 관리자

조회수 6409

첨부파일
* 문제점 및 증상

특정 함수에 존재하는 지역 변수 값이 NULL(0)값이 들어와 Target이 죽는 문제가 발생하였습니다. 100% 재현되면 디버깅하기가 쉬웠겠지만, 재현될 때도 있고 안될 때도 있으며, 또한 그 함수가 여러 곳에서 호출되는 함수여서 정확한 Point를 잡기가 어려운 상황이었습니다.



* TRACE32로의 접근 방법(디버깅)

첫 번째 방법으로는 그 지역변수가 사용되는 시점에 Break를 건 후 해당 지역변수가 보이는 경우 “b.s /현재 Break 주소 /varcondition 해당지역 변수명==0” 이와 같은 방식으로 Break가 가능했습니다.



위의 방법은 최적화 등과 같은 이유로 활용이 안 될 수 있는데 다른 방법도 유용하게 사용할 수 있습니다.

- 먼저 함수 내에서 지역변수가 사용되는 시점(어셈블리로 그 변수가 Register로 옮겨 사용을 기다리는 시점 R2라고 가정함)에 Break를 건 후,

- 다음 명령어 ""break.pass Register(r2)>0x0""를 Command line에 입력합니다.

- Go를 수행합니다.

- 위와 같이 Breakpoint를 설정했을 때, 해당 Break 라인에서 R2 >0 이면 계속 Go하고, Null(0)이면 멈추게 됩니다.



* 결론

TRACE32 덕분에 위와 같은 방법으로 지역변수에 Register를 이용하여 문제를 해결할 수 있었습니다.

고객문의 기술지원/
데모/
SW요청
031-627-
3116