2016-10-04 4 views
3

Swift 사용시 lldb에 기호 중단 점을 설정하는 방법은 무엇입니까? 예를 들어, 가끔은 사용하지 :Swift 및 lldb로 기호 중단 점 설정

(lldb) b set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]' 

그러나 이것은 더 이상 작동 :

중단 점 2 : 없음 위치 (대기). 경고 : 중단 점을 실제 위치로 확인할 수 없습니다.

또한

(lldb) b set -F 'UIView.updateConstraintsIfNeeded()' 
(lldb) b set -F 'UIView.updateConstraintsIfNeeded' 

하지만 사랑을 시도했습니다. 나는 lldb가 Swift를 사용할 때 "정규화 된 함수 이름"을 고려하는 것에 관한 문제를 생각해 낸다. 워드 프로세서 말 :

-F (--fullname)

는 완전한 함수 이름하여 중단 점을 설정합니다. C++의 경우 은 네임 스페이스와 모든 인수를 의미하며 Objective C의 경우 이는 클래스 및 선택기와 함께 전체 기능 프로토 타입을 의미합니다. 을 여러 번 반복하여 여러 이름에 대해 하나의 중단 점을 만들 수 있습니다.

스위프트는 어떨까요?

답변

3

lldb가 중단 점 (-F 포함) 중 하나와 일치하는 중단 점을 설정하는 경우 대상 언어가 일치하기 때문에 대상 언어를 알아야합니다. 기본적으로 lldb는 현재 프레임의 언어를 선택하지만이를 재정의 할 수 있습니다.

(lldb) break set -F '-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded]' -L objc 
Breakpoint 3: where = UIKit`-[UIView(AdditionalLayoutSupport) updateConstraintsIfNeeded], address = 0x0000000100963acc 

또는 당신은 일치하는 기호를 이해하려고 노력하지 않는 -n 휴식 옵션을 사용하지만, 단지 수 : 그래서 예를 당신이 스위프트 프레임에서 정지 ObjC 기호를 중단 할 수행 심볼 이름에서 해당 문자열을 검색합니다.

참고 :이 경우 ObjC 심볼은 Swift에 표시되는 방식이 아니므로 중단해야합니다. 신속한 측면은 실제로 objc에 심을 넣기위한 것이기 때문에 실제로 신속한 사이드 심볼이 없습니다. .

+0

내 질문에 답변하셨습니다. 감사! 그렇다면 Xcode의 "심볼릭 브레이크 포인트 추가"UI (lldb 명령 줄과 반대)를 사용하여 동등한 중단 점을 설정할 수 없습니까? 즉, Swift-mangled 기호 이름을 모른 채로 ... –

+0

Xcode의 기호 중단 점은'break set -n '과 동일합니다. 이것은 좀 더 느슨한 이름 매칭 경향이 있기 때문에 "breakpoint language"는 그리 중요하지 않습니다. (Foo :: Bar vrs. Swift 's Foo.Bar 언어가 중요합니다.)'-n '중단 점은 너무 넓은 그물을 던진다는 것이다. 그러나 Xcode UI를 사용하면 검색 할 공유 라이브러리를 지정할 수 있으므로 소음을 다소 줄일 수 있습니다. –