27. 런타임 시 쓰레드에 의한 데이터 변경에 레이스 컨디션이 발생
했는지를 알아낸다.
설정; Scheme의 Diagnostics항목
Enable Thread Sanitizer
지원범위
64비트 macOS, iOS 시뮬레이터, tvOS 시뮬레이터
watchOS와 Device는 아직 미지원
ThreadSanitizer
28. 런타임 시 쓰레드에 의한 데이터 변경에 레이스 컨디션이 발생
했는지를 알아낸다.
설정; Scheme의 Diagnostics항목
Enable Thread Sanitizer
지원범위
64비트 macOS, iOS 시뮬레이터, tvOS 시뮬레이터
watchOS와 Device는 아직 미지원
ThreadSanitizer
29. 테스트 돌릴 때 옵션을 키기를 추천
검출 케이스
초기화 되지 않은 뮤텍스 사용
엉뚱한 쓰레드가 언락
쓰레드 릭
시그널 핸들러에 안전하지 않은 함수 호출
데이터 레이스
ThreadSanitizer
30. 데이터 레이스
동기화 없이 여러 쓰레드가 한 주소를 접근할 때
그 중 하나는 읽기용 쓰레드
끝난다면 결국 쓰레기 값이나 메모리 오염으로
구조상 문제가 있다는 것
혹은 동기화 작업 누락
ThreadSanitizer
31. Memory Graph Debugging
메모리 누수나 버려진 메모리 탐침
디버깅 모드에서 pause된 경우
macOS, iOS 10, tvOS 10, watchOS 3 지원
Sanitizer가 켜져 있으면 동작 안함
Scheme의 Diagnostics 탭에서 Malloc Stack설정
All Allocation
Live Allocation Only
32. 메모리 누수나 버려진 메모리 탐침
디버깅 모드에서 pause된 경우
macOS, iOS 10, tvOS 10, watchOS 3 지원
Sanitizer가 켜져 있으면 동작 안함
Scheme의 Diagnostics 탭에서 Malloc Stack설정
All Allocation
Live Allocation Only
Memory Graph Debugging
33. Memory Graph Debugging
두가지 그래프 스타일
Root Paths
참조 메모리
얼마나 많은 메모리가 잡혀 있는지
Cycles
메모리 누수
누수가 어떻게 다른 누수와 연결되는지
34.
35. Memory Graph Debugging
.memgraph; Plist file
저장하기
File → Export Memory Graph
불러오기
Open the file
디버거 프로세스가 아니라서 트레이스, 퀵룩, po 안됨; 그
래프 말고는 아무것도 안됨
48. LLDB
Xcode와 LLDB는 별도 프로세스로 분리
LLDB는 죽어도 Xcode는 적당히 살아난다
여러 버전의 디버거 지원
디버거는 자동적 선택됨
예를 들면 Swift 3는 가장 최신 디버거
Swift 2.3는 Xcode 7.3.1-era 디버거
오픈소스 Swift도 매칭된 디버거를 사용하게 된다
49. LLDB
parray <count> <expression>
poarray <count> <expression>
자동 import
@import UIKit
settings show target.auto-import-clang-
modules false
Debugger Customization