실행 중인 앱을 일시 정지하려면 브레이크포인트!
소스 코드에서 버그가 의심되는 위치를 찾았다면, 해당 줄에 브레이크포인트를 설정하여 디버거가 일시 정지하도록 만들 수 있습니다.
버그의 정확한 위치를 모르는 경우에는 심볼릭 브레이크포인트, 이슈 브레이크포인트로 특정 조건에서 중단되도록 설정할 수 있습니다.
또한, 반복 작업 중 발생하는 버그나 특정 조건에서만 발생하는 문제를 추적하려면 브레이크포인트에 조건을 지정할 수 있습니다.
브레이크포인트 위치 지정하기
코드에서 앱 실행을 일시 정지할 위치로 이동한 뒤, 소스 편집기의 행 번호 또는 여백을 클릭하여 브레이크포인트를 설정합니다.
그러면 해당 줄에 브레이크포인트 아이콘이 표시됩니다.
브레이크포인트를 끌어서 위아래로 이동하거나 여백 바깥으로 끌어내면 삭제할 수 있습니다.
디버그 영역 툴바의 브레이크포인트 아이콘을 클릭하면 전체 브레이크포인트를 활성화/비활성화할 수 있습니다.
전체 브레이크포인트 관리하기
여러 파일에 걸쳐 많은 브레이크포인트를 설정했다면, 좌측 내비게이터의 Breakpoint Navigator 버튼을 클릭해 관리할 수 있습니다.
- 항목을 클릭하면 해당 위치로 이동할 수 있습니다.
- 항목 선택 후 Delete 키를 누르면 삭제됩니다.
- 아이콘을 클릭하면 활성화/비활성화 전환됩니다.
- Control+클릭 → Edit Breakpoint에서 이름을 지정하면 자주 사용하는 브레이크포인트를 필터로 쉽게 찾을 수 있습니다.
필터 기능으로는 수정된 브레이크포인트만 보기, 활성화된 브레이크포인트만 보기 등의 조건도 설정할 수 있습니다.
조건을 지정하여 일시 정지하기
여러 번 반복 후 발생하는 버그라면, 매번 브레이크포인트에서 일시 정지 후 계속(Continue)을 누르는 것은 번거롭습니다.
이럴 땐 다음 두 가지 방법을 사용할 수 있습니다.
- 지정 횟수만큼 무시 후 일시 정지
- Control+클릭 → Edit Breakpoint → Ignore 횟수 지정
- 예: “8번 무시 후 중단”
- 특정 조건일 때만 중단
- Control-클릭 → Edit Breakpoint → 조건식 입력
- 예: indexPath.row > 8
조건은 로컬 범위 내 사용 가능한 변수로 지정할 수 있으며, 참일 때만 중단됩니다.
코드 외부의 심볼에서 중단하기 (Symbolic Breakpoint)
직접 작성하지 않은 코드에서 문제가 발생할 경우, 예를 들어 Auto Layout 제약 오류 등에서는 UIViewAlertForUnsatisfiableConstraints 같은 심볼에 브레이크포인트를 설정해야 합니다.
- Breakpoint Navigator → + 버튼 → Symbolic Breakpoint 선택
- Symbol 필드에 UIViewAlertForUnsatisfiableConstraints 입력
이 경우 앱 메인 함수 등에서 일시 정지될 수 있으며, 콘솔에서 다음 명령어로 Auto Layout 추적 정보를 확인할 수 있습니다.
일부 심볼은 너무 자주 호출되어 디버깅이 어려워질 수 있으므로 조건을 설정하거나 원하는 시점에 활성화하는 방식으로 조절하세요.
처리되지 않은 Swift 오류 또는 Objective-C 예외에서 중단하기
Swift에서 처리되지 않은 오류 또는 Objective-C 예외가 발생하면 앱은 충돌합니다.
이때 스택 트레이스만으로 원인을 알기 어려운 경우가 많습니다.
Swift 오류의 경우
- 보통 try! 구문에서 충돌하지만, 실제 오류 발생 위치는 다릅니다.
- Breakpoint Navigator → + 버튼 → Swift Error Breakpoint 추가
- 그러면 오류가 발생한 줄에서 중단됩니다.
Objective-C 예외의 경우
- 주로 AppDelegate 또는 main에서 충돌 위치로 표시됩니다.
- Breakpoint Navigator → + 버튼 → Exception Breakpoint 추가
- 그러면 예외가 발생한 코드 줄에서 멈춥니다.
시스템에서 감지한 런타임 이슈에서 자동으로 중단하기
Xcode의 Sanitizer 도구를 사용하면 다음과 같은 런타임 문제를 감지할 수 있습니다.
- 메인 스레드 외에서 UI 업데이트
- 스레드 간 변수 접근 문제
- 메모리 접근 오류
- 정의되지 않은 동작
- Breakpoint Navigator → + 버튼 → Runtime Issue Breakpoint 추가
- 원하는 문제 유형 선택
Sanitizer가 해당 문제 가능성이 있는 코드 줄에서 앱을 일시 정지시키고, 원인을 추적할 수 있도록 돕습니다.
참고: https://developer.apple.com/documentation/xcode/setting-breakpoints-to-pause-your-running-app
'iOS' 카테고리의 다른 글
[iOS] Debuggging, LLDB (0) | 2024.11.12 |
---|---|
[iOS] App's life cycle (0) | 2024.08.20 |
[iOS] App SandBox (0) | 2024.08.20 |