2013-07-01 2 views
2

expression -o -- (NSString *)[[UIWindow keyWindow] recursiveDescription]으로보기를 디버깅하는 동안 -[UILabel length]: unrecognized selector sent to instance 0xd4ebe50을 받았습니다. 디버거가 unrecognized selector이되면 LLDB를 사용하여 문제를 디버그하고 스택 추적을 얻고 싶습니다. 수동으로 리드 중단 점을 설정 나는 w 중단 점을 설정 breakpoint set --selector length디버깅 세션 중에 '인스턴스로 전송 된 인식 할 수없는 선택기'중단

  • 승/중단 점을 설정 엑스 코드
  • 에 예외 중단 점을 설정
    • 을 시도했습니다

      /breakpoint set --selector -[UILabel length]

    경고로 WARNING: Unable to resolve breakpoint to any actual locations. 디버깅 중에 중단 점이 트리거되지 않습니다.

    unrecognized selector에서 멈추고 스택 추적을 얻을 수 있습니까?

  • +0

    어쨌든 스택을 볼 수있는 충돌이 발생하지 않습니까 ('bt' 명령)? – trojanfoe

    +0

    lldb의 내부에서'-description' 호출을하는 동안에는 안됩니다. – mkalmes

    +0

    lldb는 실행 전에 상태로 돌아갑니다. – mkalmes

    답변

    1

    breakpoint set --selector은 관련 라이브러리 (여기서는 UIKit)에 대한 dSYM없이 Xcode 4.6에서 올바르게 작동하지 않았습니다.

    그래도 breakpoint set -n "-[UILabel length]"이 작동 할 것으로 예상됩니다. 또는 Xcode에서 심볼릭 브레이크 포인트를 추가 할 수 있습니다. 디버그> 중단 점> 심볼 중단 점 작성을 선택하면 -[UILabel length]을 입력 할 수 있습니다.

    가장 짧은 고유 명령은 항상 lldb에서 유효하므로 을 쓰는 또 다른 방법은 br s -S length입니다.

    비슷한 질문이 unrecognized selector sent to instance에서 끝납니다. 권장 사항은 po 0xd4ebe50입니다.

    2

    xCode에서는 모든 Objective-C 처리되지 않은 예외에 중단 점을 설정할 수 있습니다. 그렇게하려면 중단 점 네비게이터, 네비게이터의 왼쪽 아래 모서리에있는 + 기호를 누르고, "예외 중단 점 추가"를 선택합니다

    enter image description here

    당신은 "모든 예외"가 표시됩니다 기입. 오른쪽, 그 편집을 클릭 중단 점을 선택하고 다음과 같이 구성 : 앱 충돌, 실행이 스택 추적하고 당신이 필요로하는 모든 정보를 표시, 충돌 코드에서 중단됩니다

    enter image description here

    그런 다음,.

    희망 하시겠습니까?

    +1

    이것은 첫 발걸음이었습니다. 예외가 처리되기 전에 lldb가 이전 응용 프로그램 상태로 돌아 가기 때문에 작동하지 않았습니다. – mkalmes

    +0

    이전에이 작업을 수행했지만 Xcode가 설정을 잊어 버렸고 다시 사라졌습니다. 감사! 내가 결코 기억할 수 없을 정도로 모호한 Xcode 것들 중 하나. 기본적으로 예외가 발생하지 않는 이유는 무엇입니까? – n13

    1

    인식 할 수없는 선택기를 멈추고 스택 추적을받을 수 있습니까? (: -u false 짧은)

    --unwind-on-error false와 응용 프로그램 상태 호출 expression 되감기에서 lldb을 중지하십시오. 이 옵션을 사용하면 lldb는 상태를 정리하지 않습니다.

    그러나 이것은 뷰 계층에서 레이블의 위치를 ​​디버깅하는 데 도움이되지 않았습니다. lldb는 처음부터 레이블에 주소 0xd4ebe50에서 찾을 수 있다고 말했습니다.po [0xd4ebe50 text]의 출력을 통해 조사 할 수있는 단서를 얻을 수있었습니다. 추가 지원을 위해 라벨에 녹색 배경을 추가했습니다. 문제의 원인이 description 인 레이블이 -recursiveDescription입니다.