nyancoder

WWDC 2021 - Discover breakpoint improvements 본문

WWDC/WWDC 2021

WWDC 2021 - Discover breakpoint improvements

nyancoder 2021. 7. 19. 03:02

원본 영상: https://developer.apple.com/videos/play/wwdc2021/10209/

 

  • 버그란 프로그램이 예상대로 실행되지 않는다는 의미이기 때문에, 버그가 발생하면 상황을 더 잘 이해하기 위해서 프로세스의 현재 상태를 검사합니다.
  • 또는 프로세스의 실행을 진행하면서 상태를 확인해봅니다.
  • 이때 버그가 발생하기 직전에 일시 정지하는 것이 버그를 확인하기 좋습니다.
  • 일시정지를 하는 좋은 방법은 중단점을 사용하는 것입니다.

 

Source file breakpoints

  • 소스 파일 중단점을 알아보면, 중단점이 하나의 파일 안에 설정되어 있습니다.
  • 이 경우 가장 일반적인 유형은 특정 줄에 중단점을 설정하는 것입니다.

Line breakpoint를 만드는 가장 빠른 방법은 일시 중지하려는 줄의 바로 왼쪽의 여백을 클릭하면 중단점이 생깁니다.

  • Line breakpoint는 사용하기 쉽지만 충분히 세분화되어있지 않기 때문에 때로는 한 줄 내에서도 특정 위치에 중단점을 설정하고 싶을 수 있습니다.
  • 이를 위해 Xcode 13에 새로 도입된 기능이 바로 Column breakpoint입니다.

  • Column breakpoint를 설정하려면, 원하는 함수 호출에서 Command-클릭을 통해 팝오버를 호출 한 다음 Set Column Breakpoint를 선택하면 됩니다.
  • 중단점을 수정해야 하는 경우 이를 두 번 클릭하여 중단점 편집기를 불러올 수 있습니다.
  • Column Breakpoint를 삭제하려면 빈 공간으로 드래그하여 삭제할 수 있습니다.

  • 프로그램이 중단점에 도달하면 Xcode는 녹색 줄을 중지된 라인을 알려줍니다.
  • Xcode 11.4에서는 실행 중인 코드 아래에 녹색 밑줄을 표시해서 다음에 실행할 코드를 알 수 있습니다.

  • 열 중단점은 Swift의 클로저 또는 Objective-C의 블록에 유용합니다.
  • 마지막 클로저의 $0에 열 중단점을 설정하면, 쉽게 해당 클로저가 실행될 때의 값을 확인할 수 있습니다.

 

Symbolic breakpoints

  • 함수 이름을 이용하여 특정 함수가 실행될 때 프로세스를 중단하도록 할 수 있습니다.
  • 파일 중단점을 사용할 수 없거나 사용하기 힘든 상황에서 유용합니다.
  • 예를 들어 공통 기능을 구현하는 많은 하위 클래스가 있는 경우 하위 클래스의 각 파일에 중단점을 설정해야 하는 상황에서 유용합니다.

  • 중단점 탐색기 하단의 추가 버튼을 눌러서 나타나는 목록에서 Symbolic Breakpoint를 선택하면 Symbol을 입력할 수 있도록 중단점 편집기가 나타납니다.
  • 일반적인 함수 명의 경우 시스템 라이브러리와 같은 다른 라이브러리에 포함된 이름도 포함될 수 있지만, 이런 경우 Module 필트에 값을 넣어서 범위를 제한할 수 있습니다.

  • Xcode 13의 새로운 기능으로 중단점을 어디에도 설정할 수 없으면 Xcode는 점선 아이콘으로 중단점을 표시합니다.

  • 중단 점이 점선으로 표현되었을 때, 마우스를 위로 가져가면 몇 가지 도움이 될 수 있는 설명을 표시해줍니다.

  • Symbolic breakpoint의 경우 이름의 철자가 정확해야 하고, 라이브러리 내에 존재해야 합니다.
  • 또한 해당 중단점이 있는 라이브러리가 로드되어야 합니다.
  • 몇몇 라이브러리는 사용자가 버튼을 클릭하는 것과 같은 특정 작업이 수행된 이후에만 로드가 되며, 로드가 될 때 Xcode는 중단점 표시를 갱신합니다.

  • 철자가 틀린 것 같은 경우에는 검색을 통해서 찾을 수도 있지만 lldb의 lookup 기능을 이용하면 조금 더 편리합니다.
  • 위의 이미지는 정규식의 경우는 'lookup -r'을 넣고, 이름에 대해서 'n'을 넣어 찾고자 하는 이름인 'convert'를 추가한 다음 모듈을 제한하기 위해 찾을 모듈 명인 'Fruta'를 입력한 예제입니다.
  • 일치하는 항목이 4개의 항목에서 철자가 틀린 것을 확인할 수 있습니다.

  • 참조하는 위치가 없는 않은 중단점은 소스 파일 중단점에서도 볼 수 있습니다.
  • 중단점이 있는 줄이 컴파일되어야 하는데 위의 예제에서는 전처리기의 else문에 위치하기 때문에 컴파일되지 않았습니다.
  • 또한 컴파일러가 모듈에 대한 디버그 정보를 생성해야 디버그 할 수 있으므로 빌드 설정을 확인해야 합니다.

 

Runtime issue breakpoints

  • Runtime issue는 백그라운드 스레드에서 UI상태 변경과 같이 런타임에 발생하는 문제입니다.
  • 충돌만큼 심각하지는 않기 때문에 기본적으로 Xcode는 프로세스를 일시 중지하지는 않습니다.
  • 대신 문제가 발생하면 Xcode는 문제 탐색기에 표시합니다.

  • Runtime issue breakpoint를 사용하면 문제가 발생할 때 프로그램을 멈출 수 있습니다.
  • Runtime issue breakpoint에는 여러 유형이 있으므로 팝업에서 원하는 유형을 선택할 수 있습니다.

  • 일부 유형의 경우는 실행 시에 특정 진단 기능을 활성화해야 합니다.
  • 예를 들어 Main Thread Checker 중단점을 사용하고 싶은 경우 진단 탭에서 Main Thread Checker를 활성화해야 합니다.

 

목차: https://nyancoder.tistory.com/2

Comments