본문 바로가기
Trace32

[Trace32] 디버거 구조 완전 이해 (USB 연결부터 ECU 제어까지 전체 흐름)

by Autosar 2026. 5. 2.
반응형

Trace32를 처음 접하면 대부분 이런 상태에 빠진다.

툴은 실행했는데 아무것도 할 수 없고, 어디서부터 시작해야 하는지도 모른다.

 

이건 사용법의 문제가 아니라 구조를 모르는 상태에서 툴을 건드리기 때문이다.

Trace32는 일반적인 소프트웨어 디버거가 아니라 하드웨어를 직접 제어하는 디버거다.

 

그래서 먼저 버튼이 아니라 흐름을 이해해야 한다.

 

Trace32는 무엇인가

 

Trace32는 Lauterbach에서 만든 디버거로,

MCU 내부의 CPU, 메모리, 레지스터를 외부에서 직접 제어할 수 있는 툴이다.

 

일반적인 IDE 디버거와의 차이는 명확하다.

 

IDE 디버거는 프로그램 위에서 동작하지만,

Trace32는 프로그램 아래, 즉 하드웨어 레벨에서 동작한다.

 

이 차이 하나 때문에 할 수 있는 일이 완전히 달라진다.

 

왜 Trace32를 사용하는가

 

실무에서 Trace32를 사용하는 이유는 단순하다.

다른 방법으로는 확인할 수 없는 영역을 볼 수 있기 때문이다.

 

예를 들어,

- ECU가 부팅조차 되지 않는 상황
- 초기화 코드에서 멈추는 문제
- 인터럽트 진입 이상
- 메모리 깨짐

 

이런 문제는 OS나 Application 레벨에서 디버깅이 불가능하다.

 

Trace32는 이 상황에서 CPU를 강제로 멈추고, 특정 주소의 메모리를 읽고,

레지스터 상태를 직접 확인하고, 코드 실행을 한 줄씩 제어할 수 있다.

 

즉, “실행 중인 시스템을 밖에서 붙잡고 해부하는 도구”라고 보면 정확하다.

 

전체 구조 흐름

 

Trace32를 이해하려면 가장 먼저 이 흐름을 머릿속에 넣어야 한다.

 

PC (Trace32) → Debug Probe (USB 연결) → JTAG / DAP 인터페이스 → MCU Debug Port → CPU / Memory

 

USB 연결 이후 실제로 일어나는 일

 

많은 사람들이 “USB 연결하면 디버깅 되는 것 아닌가?”라고 생각한다.

하지만 실제 내부에서는 훨씬 더 많은 일이 일어난다.

 

Trace32를 실행하고 USB로 디버그 장비를 연결하면,

PC는 Debug Probe와 통신을 시작한다.

 

이 Debug Probe는 단순한 케이블이 아니라 JTAG 또는 DAP 신호를 생성하는 장치다.

이 신호는 MCU 내부의 Debug Port로 전달되고, 그 순간부터 외부에서 CPU를 제어할 수 있는 상태가 된다.

 

이때 가능한 동작은 다음과 같다.

 

- CPU 강제 정지 (Halt)
- 코드 실행 (Run)
- 특정 주소 메모리 읽기
- 레지스터 값 확인
- 브레이크 포인트 설정

 

즉, USB를 연결하면 끝이 아니라, 내부에서는 아래와 같은 제어 흐름이 형성된다.

 

Attach와 Reset의 차이

 

Trace32를 사용할 때 반드시 이해해야 하는 개념이 있다.

바로 Attach와 Reset이다.

 

Attach는 이미 실행 중인 ECU에 그대로 붙는 방식이다.

즉, 현재 상태를 유지한 채 내부를 들여다본다.

 

반면 Reset은 ECU를 초기화한 뒤 처음부터 디버깅을 시작하는 방식이다.

 

이 차이를 모르면 다음과 같은 문제가 발생한다.

- Attach 했는데 코드 위치가 이상함
- Reset 했더니 초기화 코드만 반복됨

 

이건 툴 문제가 아니라 동작 방식 차이다.

 

정리

 

Trace32는 단순한 디버깅 툴이 아니다.

MCU 내부를 직접 제어하는 하드웨어 디버거다.

 

핵심은 세 가지다.

 

1. PC에서 실행되지만 실제 제어는 MCU에서 이루어진다.

2. USB는 단순 연결이 아니라 디버그 경로의 시작이다.

3. Debug Probe가 JTAG/DAP 신호를 통해 CPU를 제어한다.

 

이 구조를 이해하면 이후 명령어, 설정, Attach 과정이 자연스럽게 연결된다.

반응형