Xcode Instruments
Xcode Instruments 는 Xcode 에서 제공하는 앱의 성능 분석 및 디버깅 도구로 앱 개발을 진행할 때 메모리 릭이 나지 않게 개발을해야 하므로 메모리 릭에 대한 분석을 할 때 Xcode Instruments 를 활용하여 성능 분석 및 메모리 릭 분석을 할 수 있다.
Stack Trace

코드를 실행하면 스택에 쌓이게 되면서 코드를 수행한다. 이를 콜 스택(Call Stack) 이라 한다. 코드를 콜 한 순서를 알 수 있는 스택으로 이 스택을 뒤돌아보며 코드가 수행된 기록을 훑어보는 것을 스택트레이스 라고 한다.
Xcode Instruments 사용 방법
1. 메모리 누수가 나는 상황 연출

간단하게 버튼 하나를 만들고 버튼을 클릭했을 때 메모리 누수가 나도록 코드를 작성한다.
import UIKit
class ClassA {
var x = ClassB?
}
class ClassB {
var x = ClassA?
}
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
@IBAction func buttonTapped(_ sender: Any) {
let classA = ClassA()
let classB = ClassB()
classA.x = classB
classB.x = classA
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
메모리 누수가 나는 상황을 순환참조가 나는 상황으로 설정
ClassA <-> ClassB 상태가 되도록 설정
2. Xcode Instruments 실행

코드를 작성하고 Run 을 통해 프로젝트 실행을 한 다음 Product 에 Profile 을 클릭하면 Xcode Instruments 가 열린다. 이 후 초록색 체크 표시가 되고 있다면 메모리 누수가 발생하지 않은 상태이고, 만약 빨간색 x 표시가 나타난다면 메모리 누수가 발생한 상태이다.

Leaks -> CallTree 를 선택하면 콜 스택을 확인할 수 있다. 가끔 Xcode Instruments 가 스택을 불러올 때 시간이 걸릴 수 있으므로 주의가 필요하다. 이럴 때는 Xcode Instruments 정지 후 Leaks 와 Call Tree 탭을 왔다갔다 하면 로드가 된다.

아래 Call Tree 에서 Invert Call Tree, Hide System Libraries 를 클릭하면 콜 스택을 쉽게 확인할 수 있다.
위 사진의 콜 스택 아래에서 부터 순서대로 읽어보면 AppDelegate 에서 앱을 시작하고, ViewController,buttonTapped(_:) 가 실행되는것을 확인할 수 있고, ClassA 에서 메모리 릭이 발생한 것을 확인할 수 있다.

메모리 릭이 발생한 콜스택 에서 우클릭을 누르고 Reveal in Xcode 를 클릭하면 Xcode 상에서 메모리 릭이 발생한 부분을 확인할 수 있다.

Reveal in Xcode 를 클릭했더니 메모리 누수가 발생하는 원인인 ViewController.swift 파일로 이동하게 되는것을 확인할 수 있다.
'TIL(Today I Learned)' 카테고리의 다른 글
| 2024.09.25 Today I Learned (0) | 2024.09.25 |
|---|---|
| Today I Learned 2024.09.03 (2) | 2024.09.03 |
| 2024.07.29 Today I Learned (0) | 2024.07.29 |
| 2024.7.08 Today I Learned (0) | 2024.07.08 |
| 2024.07.04 Today I Learned (0) | 2024.07.05 |