XCODE IOS 프로파일링 디버깅 하는 방법

2024. 1. 7. 12:37·Swift/정리
728x90

안녕하세요 불망입니다..!

개발을 하다보면 어플이 멈추거나 강제종료되는 경우가 있습니다..! :(

그 이유로는 메모리 부족이나 누수이거나 교착상태, 경쟁 상태 등 다양한 이유가 있을 수 있습니다.

정확한 원인 분석을 하기 위해서는 프로파일링을 하거나 디버깅을 해야합니다.

메모리 누수나 부족 교착상태 등등을 찾아보려면 프로파일링해보는 것이 제일 정확한 방법입니다.


1. XCODE 프로파일링

XCODE 프로파일링이란 앱 성능 및 리소스 사용을 분석하고 최적화하는 과정을 뜻합니다. 앱이 실행하는 중에 발생하는 이슈에 대해서 모니터링 할 수 있고 메모리누수, 에너지효율성, 메모리할당 과정 등을 전반적으로 훓어볼 수 있습니다. 단순 출력으로는 잡아내기 힘든 성능 이슈나 메모리 부분을 주로 관찰 및 분석합니다.

디버깅과 차이점은 디버깅은 내가 원하는 위치나 소스 쪽을 집중적으로 관찰하는 것이고 프로파일링은 앱이 시작할 때부터 끊임없이 전체적인 과정을 살펴보는 것입니다. 2가지 방법 전부 앱을 분석하는데 알고 있는 것이 좋으며 XCODE에서 참 잘해놓은 기능이라고 생각합니다.

XCODE에서 프로파일링을 시작하는 법은 XCODE -> Product 메뉴 -> Profile 선택 해줍니다.

XCODE 프로파일링 하기

선택해준다면 아래와 같은 창이 뜹니다. 어떤 것을 위주로 프로파일링을 할 것인지 요소를 선택하는 것입니다.

XCODE 프로파일링 메뉴

메뉴 화면

1. Allocation : 앱의 메모리를 추적하고 메모리 누수, 사용 후 해제되지 않은 객체 등의 문제를 찾아내는데 좋습니다.

2. Leaks : 메모리 누수를 경고표시로 감지하고 원인을 추적합니다. 소스까지 표시되어서 아주 유리합니다.

3. Time Profiler : 앱의 CPU 사용량과 실행 시간을 분석하여 병목 현상을 찾고 성능을 개선합니다.

4. Energy Log : 일반 디버그할 때 대략적으로 표시되긴 하지만 이 요소에는 에너지 사용량을 측정하고 에너지 효율을 개선하는데 필요한 정보를 줍니다.

Xcode Profile Leaks 표시 및 상세정보

앱을 Profile -> Instrument로 실행한다면 다음과 같은 화면이 뜹니다.

Allocation은 처음부터 (앱이 시작할 때) 메모리가 할당되는 것을 볼 수 있고 점차올라가서 대기상태일 때는 수평선인 것을 볼 수 있습니다.

마우스 커서를 그래프에 가져간다면 현재 메모리가 몇메가 할당되어 있는지 확인할 수 있습니다.

이 메모리는 Heap에 쌓이는 메모리며 너무 가파르게 올라가거나 껐는데도 떨어지지 않는다면 문제가 있는 것입니다.

너무 그래프가 확 올라간다면 올라간 그래프 부근을 클릭하면 그 부분에서 메모리가 어떻게 할당되었는지 정보를 알 수 있습니다.

그 정보를 통해 내가 작성한 코드로 들어가볼 수 있는 것이고 메모리해제가 되어있지 않은 부분을 확인할 수 있습니다.

Leak과 함께 Allocation을 선택한다면 위와같은 그래프, 표시를 볼 수 있습니다. 초록색은 Leak이 생기지 않았다는 뜻이며 빨간색 X는 메모리 누수가 발생했다는 뜻입니다. 그것을 클릭하면 어디서 몇개 발생했는지 쓰레드의 주소가 나오고 Responsile Frame이라고 이 소스를 Trace할 수 있습니다.

Xcode에서 만들어놓은 Profile의 제대로 된 사용성을 Leaks을 통해 느꼈습니다. X라고 표시된 메모리 누수는 꼭 디버깅하거나 코드를 찾아서 잡아줘야합니다. 크기도 얼마나 되는지 제대로 알려줍니다. 현재 갯수가 몇개되지 않아서 괜찮아보이지만 반복되다보면 메모리 누수가 심해지면서 해제도 되지않고 앱이 죽게 됩니다.

 

현재 제가 개발한 어플에서 메모리 누수를 확인할 수 있었습니다.

그리고 사진을 불러올때 갑작스럽게 많은 메모리를 사용하는 문제도 볼 수 있었습니다. 

그런 문제들을 해결하여 깔끔한 어플을 만들어보면 재미있고 좋은 경험이 될것 같습니다.

728x90

'Swift > 정리' 카테고리의 다른 글

[SwiftDataStructure&Algorithms] 기본 데이터 구조(배열, 딕셔너리)  (0) 2024.03.13
[SwiftDataStructure&Algorithms] 데이터 구조  (1) 2024.03.12
[SwiftUI] 아키텍처 고민  (0) 2024.01.06
[SwiftUI] Combine - 기본  (0) 2023.09.16
[SwiftUI] Combine  (0) 2023.09.16
'Swift/정리' 카테고리의 다른 글
  • [SwiftDataStructure&Algorithms] 기본 데이터 구조(배열, 딕셔너리)
  • [SwiftDataStructure&Algorithms] 데이터 구조
  • [SwiftUI] 아키텍처 고민
  • [SwiftUI] Combine - 기본
bulmang
bulmang
모바일 개발자 도전
  • bulmang
    bulmang
    bulmang
  • 전체
    오늘
    어제
    • 분류 전체보기 (208) N
      • 알고리즘 (68) N
        • List (3)
        • Two Pointer (6)
        • Binary Search (4)
        • Prefix Sum (3)
        • Sort (4)
        • Brute Force (5)
        • Array (2)
        • String (4)
        • 프로그래머스 (12)
        • 백준 (9)
        • Queue (2)
        • Stack (2)
        • Recursion (12) N
      • Computer Science (16)
        • Computer Architecture (6)
        • Operating System (5)
        • Network (2)
        • 기타 (2)
        • System Programming (1)
      • Swift (70)
        • 개발 (24)
        • 정리 (25)
        • 문법 (20)
      • Flutter (24)
      • 기타 (12)
        • 후기 (12)
      • Git (6)
      • Ios 오픈소스 (5)
      • UI 디자인 (5)
      • AppleScript (2)
  • 링크

    • Notion
    • Github
  • 태그

    문법
    riverpod
    Java
    협업
    today i learned
    Swift
    IOS
    til
    개발
    Apple Developer Academy
    FLUTTER
    Xcode
    코딩테스트
    SwiftUI
    컴퓨터구조
    자료구조
    알고리즘
    재귀
    피플
    백준
  • 최근 댓글

  • 최근 글

  • 인기 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.2
bulmang
XCODE IOS 프로파일링 디버깅 하는 방법
상단으로

티스토리툴바