본문 바로가기
반응형

Trace326

[Trace32] Step vs Over 차이 (여기서 대부분 헷갈린다) Trace32로 디버깅을 하다 보면 처음에는 자연스럽게 Step 버튼을 누르게 된다. 코드를 한 줄씩 따라가면 흐름을 이해할 수 있을 것처럼 보이기 때문이다. 하지만 실제로 몇 번만 사용해 보면 금방 이상한 느낌이 든다. 분명히 “한 줄씩 보려고” Step을 눌렀는데, 어느 순간부터는 코드가 아니라 함수 내부를 계속 따라가고 있는 상황이 된다. 원래 보고 싶었던 흐름은 사라지고, 전혀 관심 없던 함수 안에서 한 줄씩 디버깅을 하고 있게 된다. 이 지점에서 대부분 이렇게 생각한다. “한 줄만 실행하고 다음 줄로 가고 싶은데, 왜 계속 들어가지?” 이 문제의 원인은 Step 자체가 잘못된 게 아니라, Step의 동작 방식을 정확히 모르기 때문이다. Step은 "실행 흐름을 그대로 따라가는 명령"이다.. 2026. 5. 5.
[Trace32] 자주 사용하는 명령어 10개 (실무에서 바로 쓰는 것만) Trace32를 쓰다 보면 버튼으로 시작하지만, 결국 어느 순간부터는 명령어를 직접 사용하게 된다. 문제는 명령어가 너무 많다는 점이다.처음부터 전부 외우려고 하면 오히려 더 헷갈린다. 그래서 중요한 건 하나다.“실무에서 자주 쓰는 것만 먼저 익히는 것” 이 글에서는 실제 디버깅 과정에서 반복적으로 사용하는 명령어만 상황과 함께 정리한다. 1. 프로그램을 멈출 때 – Break 디버깅은 멈추는 것부터 시작한다.Break 코드를 실행하다가 현재 위치에서 즉시 정지한다.빠르게 상태를 확인할 때 가장 먼저 사용한다. 2. 다시 실행할 때 – Go 멈춘 상태에서 프로그램을 다시 실행한다.Go Breakpoint가 있다면 해당 위치에서 자동으로 멈춘다.Break와 함께 가장 기본이 되는 명령어다. 3. .. 2026. 5. 4.
[Trace32] 조건부 Breakpoint 제대로 쓰는 방법 (Change Breakpoint 창 실무 활용) Breakpoint를 처음 사용할 때는 크게 불편함이 없다.코드 한 줄에 걸어두고, 실행하면 그 위치에서 멈춘다.이것만으로도 디버깅이 되는 것처럼 보인다. 그런데 조금만 실무 상황으로 들어가면 바로 문제가 생긴다. 예를 들어, 어떤 변수 warning이 1로 바뀌는 순간을 확인하고 싶다고 가정해보자.그래서 아래 코드에 Breakpoint를 걸었다.if (speed > 100U){ warning = 1U; // ← Breakpoint 설정} 이제 실행하면 될 것 같지만, 실제로는 전혀 그렇지 않다.이 함수가 주기적으로 계속 실행된다면, 조건과 상관없이 이 줄에 도달할 때마다 계속 멈추게 된다. 아직 warning이 1이 되지도 않았는데, 프로그램은 계속 멈춘다.결국 우리는 실행과 정지를 반복하면서.. 2026. 5. 4.
[Trace32] 코드 원하는 위치에서 정확히 멈추는 방법 (Breakpoint 실무 사용법) Trace32로 디버깅을 하다 보면 처음에는 이렇게 사용하게 된다.코드를 실행하다가, “지금쯤이다” 싶은 순간에 정지(Break) 버튼을 누른다. 그런데 이 방법은 거의 항상 실패한다.조금만 타이밍이 어긋나도 이미 원하는 코드를 지나가버리기 때문이다. 특히 반복문이나 빠르게 실행되는 코드에서는 사람이 타이밍을 맞춰서 멈추는 것이 사실상 불가능하다. 이때 필요한 것이 바로 Breakpoint다.Breakpoint는 사람이 직접 멈추는 것이 아니라, 코드가 특정 위치에 도달했을 때 자동으로 멈추게 하는 기능이다. 왜 Break만으로는 부족한가 예를 들어 이런 코드가 있다고 가정해보자.void Control(void){ if (speed > 100U) { warning = 1U; .. 2026. 5. 3.
[Trace32] 상단 아이콘을 '순서'로 이해하기 (CPU 제어 흐름으로 보는 UI) Trace32를 처음 실행하면 상단에 아이콘이 길게 나열되어 있다. 문제는 이 아이콘들을 어디서부터 어떻게 써야 하는지 알기 어렵다는 점이다. 이유는 단순하다. 이 아이콘들은 개별 기능이 아니라 정해진 순서 안에서 사용하는 CPU 제어 명령이기 때문이다. 즉, 버튼을 하나씩 이해하려고 하면 헷갈리고, 순서대로 흐름을 이해하면 자연스럽게 연결된다. Trace32의 디버깅은 아래 5단계로 반복된다. ① 실행 중인 CPU를 멈춘다 (Break) 디버깅의 시작은 항상 “정지”다. 실행 중인 상태에서는 내부를 볼 수 없기 때문이다. 상단의 정지 아이콘(Break)을 누르면 외부에서 CPU 실행을 강제로 멈추고 제어권을 가져온다. 이 순간부터 Trace32는 단순 관찰 도구가 아니라 시스템을 직접 제어하는.. 2026. 5. 3.
[Trace32] 디버거 구조 완전 이해 (USB 연결부터 ECU 제어까지 전체 흐름) Trace32를 처음 접하면 대부분 이런 상태에 빠진다. 툴은 실행했는데 아무것도 할 수 없고, 어디서부터 시작해야 하는지도 모른다. 이건 사용법의 문제가 아니라 구조를 모르는 상태에서 툴을 건드리기 때문이다. Trace32는 일반적인 소프트웨어 디버거가 아니라 하드웨어를 직접 제어하는 디버거다. 그래서 먼저 버튼이 아니라 흐름을 이해해야 한다. Trace32는 무엇인가 Trace32는 Lauterbach에서 만든 디버거로, MCU 내부의 CPU, 메모리, 레지스터를 외부에서 직접 제어할 수 있는 툴이다. 일반적인 IDE 디버거와의 차이는 명확하다. IDE 디버거는 프로그램 위에서 동작하지만, Trace32는 프로그램 아래, 즉 하드웨어 레벨에서 동작한다. 이 차이 하나 때문에 할 수 있는 일.. 2026. 5. 2.
반응형