본문 바로가기
TIL(Today I Learned)

2024.08.01 Today I Learned

by 승환파크 2024. 8. 1.

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