본문 바로가기
Trace32

[Trace32] 코드 원하는 위치에서 정확히 멈추는 방법 (Breakpoint 실무 사용법)

by Autosar 2026. 5. 3.
반응형

Trace32로 디버깅을 하다 보면 처음에는 이렇게 사용하게 된다.

코드를 실행하다가, “지금쯤이다” 싶은 순간에 정지(Break) 버튼을 누른다.

 

그런데 이 방법은 거의 항상 실패한다.

조금만 타이밍이 어긋나도 이미 원하는 코드를 지나가버리기 때문이다.

 

특히 반복문이나 빠르게 실행되는 코드에서는 사람이 타이밍을 맞춰서 멈추는 것이 사실상 불가능하다.

 

이때 필요한 것이 바로 Breakpoint다.

Breakpoint는 사람이 직접 멈추는 것이 아니라, 코드가 특정 위치에 도달했을 때 자동으로 멈추게 하는 기능이다.

 

왜 Break만으로는 부족한가

 

예를 들어 이런 코드가 있다고 가정해보자.

void Control(void)
{
    if (speed > 100U)
    {
        warning = 1U;
    }
}

 

이 코드에서 우리는 한 가지를 확인하고 싶다.

“speed가 100을 넘는 순간, warning 값이 제대로 바뀌는지”

 

이걸 Break 버튼으로 맞추려고 하면 어떻게 될까?

 

코드는 매우 빠르게 실행되기 때문에, 이미 조건문을 지나간 뒤에 멈추는 경우가 대부분이다.

즉, “보고 싶은 순간”을 사람이 맞출 수 없다.

 

Breakpoint를 사용하면 어떻게 달라지는

 

Breakpoint를 설정하면 상황이 완전히 바뀐다.

코드의 특정 줄에 “여기 오면 멈춰라”라고 미리 지정해두면,

CPU는 해당 위치에 도달하는 순간 자동으로 정지한다.

 

사람이 타이밍을 맞출 필요가 없고, 코드가 스스로 멈춘다.

 

특정 코드 위치에 Breakpoint를 설정하면, 해당 줄에서 자동으로 CPU가 멈춘다.

 

Breakpoint는 어떻게 설정하는가

 

Trace32에서는 Breakpoint 설정이 어렵지 않다.

 

코드 창에서 멈추고 싶은 줄을 선택한 뒤 Breakpoint를 설정하면 된다.

또는 명령어로도 가능하다.

break.set <address>

 

이렇게 설정해두고 프로그램을 실행하면 해당 위치에 도달하는 순간 자동으로 멈춘다.

Breakpoint에 의해 코드가 멈춘 상태 화면

 

실제 동작을 보면 이해가 된다.

 

앞서 예제 코드에서 if 문 안에 Breakpoint를 걸어보자.

if (speed > 100U)
{
    warning = 1U;   // ← 여기에 Breakpoint
}

 

이 상태에서 프로그램을 실행하면 speed가 100을 넘는 순간 해당 줄에서 정확하게 멈춘다.

이제 우리는 멈춘 상태에서 speed 값, warning 값, 그리고 이전 실행 흐름을 확인 할 수 있다.

 

즉, 문제의 순간을 정확히 잡을 수 있다.

 

실무에서 진짜 유용한 이유

 

Breakpoint는 단순히 “멈추는 기능”이 아니다.

디버깅의 정확도를 바꿔주는 도구다.

 

예를 들어,

- 특정 함수가 언제 호출되는지 알고 싶을 때

- 반복문 중 특정 조건에서만 멈추고 싶을 때

- 값이 이상하게 바뀌는 지점을 찾고 싶을 때

 

이 모든 상황에서 Breakpoint가 사용된다.

 

특히 반복 실행되는 코드에서는 Breakpoint 없이는 디버깅이 거의 불가능하다.

조건부 Breakpoint

 

실무에서는 한 가지 문제가 더 생긴다.

코드가 너무 자주 실행되면 Breakpoint에 계속 걸려서 오히려 불편해진다.

 

이럴 때 사용하는 것이 조건부 Breakpoint다.

 

예를 들어 “warning 값이 1일 때 멈춰라” 와 같은 조건을 설정할 수 있다.

 

그러면 불필요한 정지는 발생하지 않고, 정확히 원하는 순간에만 멈춘다.

 

정리

 

Breakpoint는 다음과 같은 흐름으로 사용한다.

 

1. 멈추고 싶은 코드 위치를 정한다.

2. 해당 위치에 Breakpoint를 설정한다.

3. 프로그램을 실행한다.

4. 지정한 위치에 도달하면 자동으로 멈춘다.

5. 멈춘 상태에서 값을 확인한다.

 

이 흐름이 익숙해지면, 디버깅은 더 이상 “타이밍 맞추기”가 아니라 원하는 순간을 정확히 잡아내는 작업이 된다.

Trace32에서 Break 버튼이 “지금 즉시 멈추기”라면, Breakpoint는 “원하는 지점에서 정확히 멈추기”다.

 

이 차이는 단순한 편의성 수준이 아니라, 디버깅의 정확도와 효율을 결정하는 핵심 요소다.

 

결국 Breakpoint는 사람이 타이밍을 맞추는 방식이 아니라,

코드가 특정 조건에 도달했을 때 스스로 멈추도록 만드는 기능이다.

반응형