디버거를 물렸더니 왜 보드가 멈출까?

오전 내내 잘 돌던 보드가 있다.
Git 변경도 없고 빌드도 그대로인데, 디버거를 연결하고 Connect를 누르자 상태 LED가 꺼진다.
에러를 보려고 가져온 도구가 에러의 시작점이 된 셈이다.




이럴 때는 코드부터 고치기보다 무엇이 먼저 달라졌는지 봐야 한다.
아예 타깃에 연결되지 않는 것과, 연결은 됐는데 그 뒤 애플리케이션이 멈추는 것은 다른 문제다.




앞의 경우라면 공통 그라운드, 타깃 기준 전압, SWD 배선과 리셋 선부터 확인한다.
뒤의 경우라면 디버거의 연결 방식을 본다. 설정에 따라 연결하면서 리셋하거나 코어를 멈출 수 있고, 그동안 외부 입력이나 일부 주변장치는 계속 움직일 수도 있다.




Watch 창도 늘 조용한 관찰자는 아니다.
어떤 상태 레지스터는 읽는 순간 플래그가 지워진다. 확인하려고 연 창이 단서를 바꿨다면, 데이터시트에 적힌 읽기 동작부터 다시 봐야 한다.




같은 바이너리와 같은 입력으로, 디버거가 없을 때와 연결했을 때를 비교해본다.
연결 순간의 리셋 신호와 외부 신호 하나만 기록해도 출발점이 보일 때가 있다. 설정은 한 번에 하나씩 바꿔야 무엇이 영향을 줬는지 알 수 있다.




디버거 때문에 보드가 멈춘다면 디버거를 의심하자는 말은 아니다.
케이블인지, 리셋인지, 중단인지, 레지스터 읽기인지. 처음 달라진 순간을 찾자는 말이다.

Comments

댓글을 불러오고 있습니다.