IT TIP

Xcode 예외 중단 점이 throw되는 예외의 세부 정보를 인쇄하지 않습니다.

itqueen 2020. 12. 14. 21:25
반응형

Xcode 예외 중단 점이 throw되는 예외의 세부 정보를 인쇄하지 않습니다.


요약

예외 중단 점을 설정할 때 예외 메시지가 표시되지 않습니다. 예외 메시지는 어떻게 받습니까? 스택 추적을 얻는 방법을 이미 알고 있지만 예외 메시지는 포함되어 있지 않습니다.

세부

과거에는 Xcode로 iOS 앱을 개발했는데 문제가 생기면 오류 / 예외가 발생했습니다. 예외는 종종 "null을 역 참조 할 수 없습니다"또는 기타와 같은 메시지를 포함합니다.

이제 지난 몇 주 동안 Xcode 4.6.x를 사용하여 예외 메시지를받은 적이 없습니다. 나는 종종 SIGABRT를받을 것입니다. 예외 중단 점에 중단을 설정하면 중단되지만 iOS SDK 내의 일부 어셈블리에서 중단되고 메시지가 표시되지 않습니다.

사실, 디버거 콘솔에 아무것도 표시되지 않은 것을 마지막으로 본 기억이 없습니다.

LLVM으로 마이그레이션 할 때 예외 정보가 사라 졌습니까?

이유를 모른 채 SDK에서 내 앱이 충돌하는 것은 매우 실망 스럽습니다. 마지막 기능을 확인하여 사물이 올바르게 설정되었는지 (객체 할당 등) 확인합니다. 즉, 단서가 없음을 의미합니다.

과거에서 보류 된 빌드 설정이 어떻게 든 예외 메시지를 끄는 것일까 요?

질문을 다시여십시오. 이제 답이 있습니다!

의견에서 훌륭한 답변이 제공되었습니다. 이 질문은 완전한 답변으로 승격되어야하며, 내가 답변 한 질문에 표시 할 수 있고이 일반적인 문제를 가진 다른 사람들이 찾을 수 있습니다. 그렇게하려면 질문을 다시 열어야합니다! (그 후에이 탄원을 삭제하겠습니다.)


여기에서 Jeff의 답변을 업데이트하겠습니다.

예외를 유발 하는 행을 강조 표시하고 (main.m의 UIApplicationMain () 아님) 예외 원인 을 보려면 (예 : "오류 : 가져 오기 요청에 엔티티가 있어야합니다.") 다음과 같이하십시오.

  • 중단 점 탐색기에서 :
    1. 추가 (+), 예외 중단 점 추가
    2. 새 중단 점 선택, Control-Click, 중단 점 편집
    3. 액션 추가
    4. 입력 : po $ arg1

스택 추적의 관련 부분은 nagivator 영역에 있습니다.

이것은 Xcode 9에서 여전히 작동하는 것 같습니다.

다음은 Xcode 6 이하에서 사용하기위한 추가 사항입니다.

  1. 입력 : po (NSException *) $ eax

Xcode 6에서는 더 이상 추론되지 않기 때문에 객체 유형을 명시 적으로 제공해야합니다.


Xcode 7-9의 경우 (Jeff의 답변을 기반으로 함) :

중단 점 탐색기에서 :

  1. 추가 (+), 예외 중단 점 추가
  2. 새 중단 점 선택, Control-Click, 중단 점 편집
  3. 액션 추가
  4. 시작하다: po $arg1

예외를 유발 하는 행을 강조 표시하고 (main.m의 UIApplicationMain () 아님) 예외 원인 을 보려면 (예 : "오류 : 가져 오기 요청에 엔티티가 있어야합니다.") 다음과 같이하십시오.

  • 중단 점 탐색기에서 :
    1. 추가 (+), 예외 중단 점 추가
    2. 새 중단 점, Contorl-Click, 중단 점 편집을 선택합니다.
    3. 액션 추가
    4. 입력 : po $ eax

스택 추적의 관련 부분은 nagivator 영역에 있습니다.


예 xcode는 디버깅에 그렇게 친숙하지 않습니다. 크래시 로그를 조금 명확하게 이해하는 데 도움이되는이 기사가 마음에 듭니다. )) iOS 애플리케이션 크래시 로그 이해하기

"할당 해제 된 인스턴스로 메시지를 보냄"오류가 표시되는 경우에도이 작업을 수행하십시오.

'제품-> 구성표 편집-> 좀비 개체 활성화'

이렇게하면 좀비 개체가 활성화되고 프로젝트에 대한 프로파일 링을 수행 할 때 "zombie"를 선택하면 오류가 발생하고 NSArray * myArray와 같이 할당이 취소 된 개체를 볼 수 있습니다.


내가 얻 po $eax거나 얻은 정보 po (NSException *)$eax는 예외 중단 점이 설정되지 않은 경우 Xcode가 인쇄하는 것과 다른 것 같습니다. 그래서 다음을 수행합니다.

  1. Add an exception breakpoint
  2. Exception occurs, breakpoint was hit -> I know the location
  3. Temporarily disable breakpoints (second button on the left in Debug area)
  4. Continue program execution (third button on the left in Debug area)
  5. Details are printed -> I know the cause

Obviously not very elegant and flexible, but at least I two big questions are answered (where and why).

참고URL : https://stackoverflow.com/questions/17238673/xcode-exception-breakpoint-doesnt-print-details-of-the-exception-being-thrown

반응형