Tour Debug Console
위의 로그에 관련 추가정보를 보고싶다면
왼쪽하단의 메타데이터 옵션버튼을 누르고 선택하면됨
로그아래에 메타데이터가 배치되는걸 볼 수 있음
해당로그를 선택하고 스페이스 바를 눌러 빠르게 정보를 볼 수 있음
새 디버그 콘솔의 진짜 강점은 필터링 기능입니다
1.필터바에 직접 필터를 입력해도 됨
2.특정 타입로그에 대한 필터에 빠르게 접근하여 확인할 타입선택가능(debug, info, notice ,error, lldb, stdio, 등)
3.필요하거나 불필요한 로그를 우클릭하면 유사한 로그를 숨기거나 보여주는 옵션을 제공합니다
특정 로그 집합을 더 자세히 다루거나 뷰에서 제거할 수 있음
Live debugging
문제상황발생시 문제원인 찾는 예시를 보여주며 진행합니다
이부분은 텍스트로 간단하게 요약하겠습니다
작업을 수행하는 동안 디버그 콘솔에 다량의 출력이 생성
필터를 설정하여 원하는 로그를 찾을 수 있으니
프로젝트에서 '계정'이 포함된 모든 카테고리를 필터링합니다
필터 필드에 계정을 입력하고 팝업에서 카테고리 필터를 선택
코드에서 계정과 관련한 로깅만 남게 됩니다
몇몇 로그의 코드 위치가 정확히 기억나지 않는데요
궁금한 로그 위로 마우스를 가져가서 오른쪽 밑의 소스 위치를 선택합니다
그러면 Xcode가 로그 소스로 이동
의심스러운 부분을 확인하고 문제가 해결됐는지 확인
앱을 다시 빌드하고 문제부분 위치에서 중단하겠습니다
해당 위치에 도달했으니 계정의 현 상태를 po하고 예상대로 이전 데이터가 나오는지 봅시다
객체의 주소만 나옴. 왜 그럴까요?
사실 po는 아주 흔히 쓰이지만원하는 표현식 유형이 아님
이 클래스에 사용자 지정 디버그 설명을 선언하지 않았기 때문
p만 실행하는 게 나을 듯하니 그렇게 해 보겠습니다
원하는 결과출력성공
LLDB improvements
간단한 LLDB 표현식을 더욱 개선함
방금 버그를 해결하면서 적절하지 않은 곳에 po를 사용했는데 이런 경우 표현식 수행이 더 오래 걸릴 수도 있지만 최악의 경우 프로퍼티의 주소만 반환
CustomStringConvertible을 구현하지 않았다면요
그래서 프로퍼티에 p를 실행하여 올바른 결과를 얻었죠
하지만 그 외에도 표현식이나 v, vo, 프레임 변수 등 기억해야 하는 다른 커맨드가 많음
모두 기억하기 쉽지 않은 일이다
그래서 개발자분들을 위해
Do What I Mean Print를 소개합니다.
Do What I Mean Print를 쓰면 한 가지 명령으로 코드의 다양한 표현식을 평가해 시간을 절약하는 동시에 가장 빠르게 결과를 반환할 수 있습니다
물론 변수를 검사할 때마다 이렇게 긴 커맨드를 입력할 수는 없죠
그래서 기존의 p 별칭이 Do What I Mean Print를 수행하도록 대체했습니다
대부분의 사용 예에서 간단히 p를 실행하면 됩니다.
변수에 대한 사용자 정의 객체 설명을 프린트하고 싶은 경우에는 선택적 객체 설명 플래그와 함께 Do What I Mean Print 커맨드를 실행해도 됩니다
하지만 이제 기존의 po 별칭도 사용자 지정 객체 설명과 함께 Do What I Mean Print를 수행할 수 있죠
새로운 Do What I Mean Print 함수로 과거에는 여러 가지 커맨드가 필요했던 다양한 표현식의 커맨드를 둘 중 하나만 실행하여 가장 빠르게 원하는 출력을 얻을 수 있습니다
Tips ofr logging
표준 I/O는 명령행 UI용이고
OSLog는 디버깅용이라는 것입니다
프로그램 실행 중 이벤트 로깅에 프린트를 쓰는 경우는 거의 없죠
OSLog로 엔드 유저에게서 구조화된 로깅을 얻고 디버그 콘솔에서 구조를 유지하는 게 훨씬 낫습니다
표준 I/O에서 OSLog로 변환
프로젝트 내 여러 곳에서 실행하다 보니 모든 출력의 출처를 찾기가 어려워짐
#file, #line등 위치정보를 추가하는 이런 작업은 번거롭습니다
이 많은 추가 출력을 더하니 콘솔이 더욱 복잡해집니다.
추가 작업 없이 메타데이터를 얻는 더 나은 방법이 필요합니다 OSLog가 바로 그런 기능을 제공
콘솔에서 어떻게 보이는지 살펴보죠
로그에 지정한 추가 메타데이터가 바로 아래에 나타납니다
타임스탬프와 라이브러리 이름 프로세스 ID, 스레드 ID 소스 위치 등이 포함되죠
이 모든 정보는 필요시에는 매우 유용하지만 모든 로그를 프린트할 경우 공간을 많이 차지합니다
다행히 새로운 디버그 콘솔은 원하는 정보만 제공하도록 뷰를 사용자화 가능합니다.
마지막으로 로깅을 최대한 활용하려면 앱을 빌드할 때
첫째, 반드시 앱의 다양한 요소마다 별도의 로그 핸들을 만들어야 합니다
그래야 기본 메타데이터에 중요한 검색어를 설정하여 앱의 섹션과 관련성 높은 로그를 빠르게 찾을 수 있죠
둘째, OSLogStore를 활용하면 앱에 실제로 문제가 발생했을 때 유용한 진단 정보를 수집할 수 있습니다
마지막으로 OSLog는 추적 기능이라는 점을 명심하세요
따라서 Instruments 같은 도구를 사용하여 앱의 복잡한 성능을 분석할 수 있죠
'iyOmSd > Title: Swift' 카테고리의 다른 글
[Swift] WWDC24 Bring your app to Siri (1) | 2024.11.18 |
---|---|
[Swift] WWDC24 Meet Swift Testing (0) | 2024.11.14 |
[Swift] WWDC22 Meet Transferable (0) | 2024.11.13 |
[SwiftUI] WWDC24 Enhance your UI animations and transitions (0) | 2024.11.12 |
[Swift] WWDC24 Consume noncopyable types in Swift (0) | 2024.11.11 |