THIS IS ELLIE

Xcode 활용하기 3 - Thread Sanitizer 본문

개발/Xcode

Xcode 활용하기 3 - Thread Sanitizer

Ellie Kim 2023. 12. 12. 02:35

안녕하세요 :)

오늘은 Xcode에 있는 유용한 기능인
Thread Sanitizer에 관련해서 포스팅을 해보려 합니다

 

Thread Sanitizer란 무엇인가?

TSan이라고도 부르는 Thread Sanitizer는
스레드 간의 Race Condition을 감지할 수 있는 LLVM 기반 툴입니다

 

Thread Sanitizer 활성화하는 방법

Xcode를 눌러주시고 메뉴에서 Product를 선택하신 후

Scheme을 클릭해 줍니다
다음 Edit Scheme을 눌러줍니다

Run을 클릭하고 Diagnostics탭을 클릭하면 Thread Sanitizer을 볼 수 있어요

그리고 이 체크박스를 클릭해 활성화해 줍니다

 

Thread Sanitizer 제한 사항

어? 왜 나는 Thread Sanitizer 체크박스를 클릭할 수 없지?
ㅇㅇ 내가 처음 했던 질문임 
Thread Sanitizer는 실기기에서 사용할 수 없어요 

Thread Sanitizer는 64비트 macOS
혹은 64비트 iOS, tvOS, watchOS 시뮬레이터에서 지원된다고 합니다

 

Thread Sanitizer 사용해 보기

Thread Sanitizer야 일해라
일부러 Race Condition이 발생하는 상황을 만들어볼게요

Robot이라는 클래스를 만들어주고
robots에 하나씩 생성해서 넣어줍니다

DispatchQueue로 global큐에서 비동기(async)로 robots의 맨 첫 번째 요소를 제거해 볼게요
위 코드에선 Race Condition이 발생할 일이 뭐 없죠?

하지만

DispatchQueue로 global큐를 하나 더 추가해 볼게요
그리고 동일하게 비동기(async)로  robots의 맨 첫 번째 요소를 제거해 볼게요

이럴 때는 문제가 되겠죠?

왜? 서로 다른 스레드에서 동!시!에! robots이라는 공유 자원에 접근하려고 하니
위 코드는 Race Condition을 발생할 수 있기 때문입니다

Thread Sanitizer야 일해라
빌드를 돌립니다

Thread Sanitizer가 Race Condition을 잡아냈어요!
장하다

이렇게 Thread Sanitizer을 사용해 코드의 Race Condition을 감지할 수 있었습니다
(100%로 잡아낼 수 있는 것은 아님)

 

결론

Thread Sanitizer를 활성화해 보시면
빌드 속도도 그리고 앱 실행 속도도 엄청 느리다는 걸 느끼실 거예요
ㅇㅖ... 느려져요... 많이 느려져요...

그래서 매번 켜놓는 건 무리인 것 같고
정기적으로 사용하면서 눈에 띄지 않는 실수를 예방한다면 좋을 것 같습니다

 

resource
https://developer.apple.com/documentation/xcode/diagnosing-memory-thread-and-crash-issues-early

반응형

'개발 > Xcode' 카테고리의 다른 글

Xcode 활용하기 4  (2) 2024.04.01
Xcode 활용하기 2 - Check Spelling While Typing  (0) 2023.09.18
Xcode 활용하기 1 - Multi Cursor  (2) 2023.09.18