C-SPY 에서 이름이 같은 변수 해결

기술노트 45813

아키텍처:

Arm, RL78

컴포넌트:

debugger

업데이트:

2021-07-15 오후 9:24

소개

일부 변수의 이름이 같은 프로그램에서는 해당 변수에 대한 중단점을 설정하기가 어려울 수 있습니다.

논의

C-SPY 매크로 또는 Watch 창에서 변수에 대한 중단점을 설정하는 작업이 실패할 수 있습니다. 한 가지 가능한 이유는 C-SPY가 동일한 이름의 변수를 여러 개 찾기 때문입니다. 본 기술 노트는 이 상황에 대한 조언을 제공합니다.

해결방법

심볼의 위치에 대한 정보가 포함된 지정된 참고를 사용합니다. 심볼 위치에 대한 구문은 다음에 위치해있습니다.

module\function::symbol

여기 다섯 개의 예제가 있습니다.

예제 A

main.ctest.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\itf2\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 라는 제목 아래에 더 많은 예가 있습니다.

 

모든 제품 이름은 해당 소유자의 상표 또는 등록 상표입니다.

죄송하지만, 당사 사이트에서는 Internet Explorer를 지원하지 않습니다.보다 편안한 사이트를 위해 Chrome, Edge, Firefox 등과 같은 최신 브라우저를 사용해 주시길 부탁드립니다.