2015-01-23 5 views
10

Objective-C에서 인스턴스 변수가 변경되었을 때 LLDB에 감시 점을 설정하는 경우가 있습니다. 스위프트 속성으로도이 작업을 수행 할 수 있습니까? Swift 속성에서 감시 점을 설정할 수 있습니까?

  • 이 속성에 didSet 핸들러를 추가하고 내부에 중단 점을 설정하는 (하지만이 종류의 목적을 패배 프로그램과 재 컴파일을 중지해야합니다 :

    는 지금, 나는 이것을 달성 할 수있는 유일한 방법입니다 클래스가

내가 다른 옵션이 있습니까 브리지 오브젝티브 C를 지원하기 위해 발생하는 경우)

  • [setPropertyName:]에 상징적 중단하지만,이 단지 작품을 추가?

  • 답변

    14

    대답은 내가 상상했던 것보다 훨씬 간단했습니다. 가장 쉬운 방법은 속성 선언에 중단 점을 추가하는 것입니다. 디버거는 속성이 읽혀 지거나 쓰여질 때마다 중단됩니다.

    나처럼 나던 것처럼 속성을 변경하고 가져 오기를 무시하고 속성 선언에 중단 점을 설정 한 다음 LLDB 콘솔로 이동하여 "br list"를 입력하여 중단 점 :

    (lldb) br list 
    Current breakpoints: 
    1: file = '/Users/testuser/Desktop/TestFoo/Test.swift', line = 12, locations = 3, resolved = 3, hit count = 1 
    
        1.1: where = TestFoo`TestFoo.Test.x.getter : Swift.Int + 12 at Test.swift:12, address = 0x00000001084cfefc, resolved, hit count = 1 
        1.2: where = TestFoo`TestFoo.Test.x.setter : Swift.Int + 16 at Test.swift:12, address = 0x00000001084cff80, resolved, hit count = 0 
        1.3: where = TestFoo`TestFoo.Test.x.materializeForSet : Swift.Int + 16 at Test.swift:12, address = 0x00000001084d00f0, resolved, hit count = 0 
    

    위에서 볼 수 있듯이 세 개의 하위 중단 점이있는 마스터 중단 점 "1"이 있습니다. 게터의 하위 중단 점을 비활성화하십시오.

    (lldb) br disable 1.1 
    1 breakpoints disabled. 
    

    모두 설정되어 있습니다. 디버거는 해당 속성이 수정 될 때만 중단됩니다.

    1

    XCode (8.2 Swift 3.0)에서는 보통 swift 속성에 중단 점을 설정 한 다음 응용 프로그램을 실행합니다. 응용 프로그램이 중단 점 패널로 이동 실행 후 여러 중단 점에 중단 점을 확장 할 수 있습니다 :

    enter image description here

    모두가 기본적으로 선택됩니다, 당신은 당신이 필요로하지 않는 사람을 사용하지 않도록 설정할 수 있습니다. 참고 : 중단 점을 처음 추가 할 때 앱을 실행할 때까지 확장되지 않습니다.

    시도해 볼 수있는 다른 방법은 lldb를 사용하여 추가하는 것입니다. 먼저 클래스 인스턴스의 어딘가에 중단 점을 추가합니다 (예 : viewDidLoad ext). p self를 입력하고 인스턴스의 메모리 주소를 기록하십시오.

    그런 다음 0x0f0f0f0f0f0f가 클래스의 메모리 주소 인 것처럼 중단 점을 추가하십시오.

    break set -F '-[MyClass setMyProperty:]' -c '$rdi == 0x0f0f0f0f0f0f’