C-SPY 에서 이름이 같은 변수 해결
기술노트 45813
아키텍처:
Arm, RL78
컴포넌트:
debugger
업데이트:
2021-07-15 오후 9:24
소개
일부 변수의 이름이 같은 프로그램에서는 해당 변수에 대한 중단점을 설정하기가 어려울 수 있습니다.
논의
C-SPY 매크로 또는 Watch 창에서 변수에 대한 중단점을 설정하는 작업이 실패할 수 있습니다. 한 가지 가능한 이유는 C-SPY가 동일한 이름의 변수를 여러 개 찾기 때문입니다. 본 기술 노트는 이 상황에 대한 조언을 제공합니다.
해결방법
심볼의 위치에 대한 정보가 포함된 지정된 참고를 사용합니다. 심볼 위치에 대한 구문은 다음에 위치해있습니다.
module\function::symbol
여기 다섯 개의 예제가 있습니다.
예제 A
main.c 및 test.c 파일에는 testvar라는 정적 전역global (파일 전역) 변수가 포함되어 있는 경우 Watch 창에서 사용할 구문은 다음과 같습니다.
main\testvar
test\testvar
예제 B
main.c 파일에는 testvar라는 로컬 변수와 testfunc 라는 함수가 포함되어 있는 경우, Watch 창에 이 변수를 추가하는 구문은 다음과 같습니다:
main\testfunc::testvar
함수 이름이 고유하는 한, main\ 는 불필요해야 합니다. 추가 이미지를 디버깅할 때, 디버그 정보 함수 이름은 고유하지 않을 수 있습니다. 이러한 경우 고유한 모듈 이름을 사용하는 것이 좋습니다.
예제 C – C-SPY 매크로에서의 사용
C-SPY 매크로 (__setSimBreak) 사용시, 백슬래시( \ )를 추가 백슬래시로 보호해야합니다. 예시로:
__setSimBreak("main\\testvar", "R", "Do_the_testvar_Read_action()");
예제 D – C-SPY에서의 모습
아카이브에는 C-SPY가 상황을 처리하는 방법을 보여주는 4개의 그림이 있습니다:
- main.c, f1.c, f2.c 소스 파일이 있습니다.
- 각 파일에 static int it 변수가 있습니다.
- Watch 창에서, it변수는 it변수로 참조되고, main\it, f1\it와 f2\it로 참조되며 여기서 it참조는 지정되지 않은 참조입니다.
- 실행은 각 함수(그리고 다시 main 함수로 돌아가)로 이동하여 it의 지정되지 않은 참조가 어떻게 메모리의 값과 위치 모두에서 변경되는지를 보여 줍니다.
예제 E – 구문 오류
이름이 동일하면 구문 오류가 발생할 위험이 있습니다. 있는 경우:
- 모듈 명 t0 (파일 명 t0.c)
- typedef 명 t0
- 변수명 t
t0\t에대한 참조는 다음을 생성:
[syntax error, unexpected BACKSLASH, expecting COLON2]
(서로 다른 제한/문제점) 몇 가지 대안은 다음과 같습니다:
- Statics 창을 사용.
- 편집기 창에서 변수를 마우스 오른쪽 버튼으로 클릭하여 Watch 창에 추가합니다.
- 변수가 범위에 있지 않을 경우 모호하거나 정의되지 않음을 수락합니다.
- 모듈 혹은 typedef 명을 수정합니다.
결론
C-SPY에 모듈명, 함수명, 심볼명을 알려주면, 동일한 이름을 사용하여 여러 변수 중 하나를 참조할 수 있습니다.
디버깅 가이드에는 C-SPY EXPRESSIONS 라는 제목 아래에 더 많은 예가 있습니다.
모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.