Xcode 디버거는 객체를 인쇄하지 않고 nil을 표시합니다.


165

Xcode는를 사용하여 개체를 인쇄하려고 할 때 오류가 po <objectName>있지만 하나의 프로젝트에 대해서만 오류를 표시합니다 .

스크린 샷

오류 : 구조체를 구체화 할 수 없습니다 : 변수 <varName>의 크기가 ValueObject의 크기와 일치하지 않습니다. 실행에서 오류가 발생했습니다. PrepareToExecuteJITExpression

Xcode 디버거는 또한 모든 객체 가 그렇지 않을 때 nil( self제외됨) NSLog으로 표시합니다 (이미지에 표시된대로 올바른 출력을 표시 함). 프로젝트에 어떤 문제가 있는지 모르겠습니다. 다른 모든 프로젝트는 잘 작동합니다.

그것이 무엇인지 알 수 있습니까? (프로젝트를 청소해도 효과가 없습니다.)


나에게 그것은 일종의 포인터 문제처럼 들리지만, 전적으로 정직해야합니다. 무엇을하려고합니까?
user2967030

3
해당 프로젝트의 모든 개체 에서 오류가 발생합니다 . 조차도 NSString중단 점 위에 한 줄을 만들었습니다!
이진

1
질문에서 말했듯이 청소는 아무것도 바꾸지 않습니다. (하지만 시도해 주셔서 감사합니다. 오류 메시지를 추가했습니다.
Binarian

3
최적화없이 구축하고 있습니까? (-O0)
iccir

1
최적화는 프로젝트 설정뿐만 아니라 대상에서도 설정할 수 있습니다. m이 붙어있다 :(
바질

답변:


269

"릴리즈 모드"에 있지 않습니까?

변수 값을 보려면 "디버그 모드"에 있어야합니다 (시작 / 중지 버튼 근처 왼쪽 상단 모서리에있는 프로젝트 이름을 클릭 한 다음 "구성표 편집 ...", "실행"설정, " 정보 "탭을 클릭 한 다음"빌드 구성 "을 선택합니다. 여기에서"디버그 "를 설정합니다."릴리스 "에있는 경우 모든 문제가 발생합니다.)


3
하나의 구성 만 있습니다. 구성을 변경하여 어떻게 구성 debug configuration합니까?
이진

2
아, 빈 프로젝트를 만들었고 Build Settings배포 속성 의 모든 차이점 Strip debug symbols during copy을 YES로 설정했습니다.
이진

16
Alex1987 나는 설정 @ Strip debug symbols during copyNOOptimization LevelNone -O0프로젝트Build Settings
Binarian

32
불행하게도 특정 상황에서 lldb는 디버그 모드에서 최적화를 해제하고 디버깅 기호가있을 때이 작업을 수행했습니다. 버그를 방문 할 시간 report.apple.com
ctpenrose

4
같은 문제가 발생했습니다-최적화 수준이 "없음"이었습니다. 문제는 디버그 모드에서도 LTO (Link-Time Optimization)가 "예"로 설정되었다는 것입니다.
pi3

38

디버그 구성에 대한 "최적화 수준"을 "없음"으로 설정하고 문제를 해결했습니다.


2
웃긴, 작동하지 않았다. 나는 그 반대였다. 나는 전환했고 Fastest, Smallest[-Os]효과가있었습니다.
Nate Hat

여러 가지 제안이 있지만 (디버그 최적화를 없음으로 설정)이 문제가 해결되었습니다.
Dejal

29

구성표 설정에서 Address Sanitizer가 꺼져 있는지 확인하십시오. Address Sanitizer는 디버거에서 제대로 작동하지 않습니다.

  1. 구성표 편집 (제품 >> 구성표 >> 구성표 편집)으로 이동하고 실행을 선택한 다음 진단 탭으로 이동하십시오.
  2. "Address Sanitizer 활성화"가 꺼져 있는지 확인하십시오.

여기에 이미지 설명을 입력하십시오


4
이것이 나를위한 해결책이었습니다. 분명히 이것이 일어날 수있는 많은 이유가 있습니다.
manroe

16

모두 자신의 솔루션을 가지고있는 것 같습니다.

나를 위해, 내가 사용 Objective-C하고 Swift같은 시간에.

우선, 이동 TARGETS -> Build Settings및 검색하려면code generation

당신은 찾을 수 Apple LLVM 6.0Swift Compiler

Optimization Level모두를로 변경 None한 다음 디버그하면 값이 아닌 것을 알 수 있습니다nil

놀랍게도 일단 값을 볼 수있게되면이 문제를 영구적으로 해결 한 다음 이전의 값을 변경할 수 Optimization Level있습니다.


11

이 문제가 발생할 수있는 다른 방법이 있습니다. 저에게는 디버그 빌드에서도 "Other C Flags"값이 "-O2"로 설정 되었기 때문입니다. 디버그 빌드에서이 기능을 끄면 문제가 해결되었습니다.


9

필터링 된 디버그 출력

나를 위해 Xcode는 디버거 출력을 필터링했습니다. 출력 설정이 디버거 출력 또는 모든 출력인지 확인하십시오


6

방금이 문제가 발생 Deployment Postprocessing = YES하여 빌드 설정 때문인 것으로 나타났습니다 .

NO아래 스크린 샷에서 볼 수 있듯이 이것을 수정 하여 수정하십시오.

여기에 이미지 설명을 입력하십시오

Xcode 버전 : OSX 10.9.5의 6.0.1 (6A317)


5

방금 비슷한 문제가 발생합니다. 어느 시점에서 Xcode 디버거는 NSStrings와 같은 일부 객체 유형을 값으로 초기화했지만 (null)로 인쇄했습니다. 통해 인쇄

NSLog(@"String value: %@", myString);

객체의 올바른 값이 표시되었습니다.

혼란스러운! 문제를 해결하는 것은 다소 쉬웠습니다. Xcode를 종료하고 컴퓨터를 다시 시작했습니다. Xcode를 다시 시작하면 모든 것이 잘 작동합니다. :).


5

Link-Time Optimization = No빌드 설정에서 디버그 모드를 확인하십시오 .


동적 프레임 워크 빌드 설정에서만 Xcode 8 에서이 문제를 만났습니다! Thx
vmeyer

3
  1. 파생 데이터 삭제
  2. 상당히 Xcode / 다시 시작
  3. 클린 프로젝트

그것이 저에게 필요한 전부입니다.


2

여기의 솔루션 은 변수 error: <EXPR>:1:1: error: use of unresolved identifier를 시도 할 때마다 나타나는 버그를 수정합니다 po.

나를 위해 솔루션으로 이동했다 Build Settings및 검색 Optimization Level및 확인 각하게 Debug설정이 설정되었습니다 None.


이것은 실제로 나를 위해 고쳤습니다. 설정을 비활성화 할 때의 단점은 무엇입니까?
재스퍼

1

빌드 설정에서 "기타 C 플래그"로 이동하여 디버그 값을 -o2에서 -O0으로 설정하십시오.


0

나는 이것도 만났고 내가 릴리스 모드에 있음을 알았을 때 디버그로 전환했다. 내가 먼저 깨끗해야한다고 밝혀졌습니다 (cmd + shift + k).

그래서 릴리스 모드로 빌드 한 후에는 모든 것이 개발에서 다시 컴파일되지 않으므로 lldb가 심볼을 제대로 읽을 수 없다고 생각합니다. 청소 및 재 컴파일 후 개발에 도움이되었습니다.


-3

실제로 시스템은 기본적으로 작동해야하며 여러 가지 다른 설정에 대한 링크로 인해 작동하지 않을 수도 있습니다.

디버그 모드에서 Apple 만 대답 할 수있는 미스터리 일 때 시스템이 항상 디버그 할 수없는 이유는 무엇입니까?

결국 디버그 / 비디 버그의 차이점은 메모리 / 디스크 공간 만 채우는 메타 데이터가있는 추가 테이블입니다.

시뮬레이터 또는 장치에 대해 직접 컴파일하는 경우 추가 메가 바이트를 관리하지 않습니다.

그래서 우리는 지난 세기부터 내가 아는 모든 아이디어가 잘되는 매우 기본적이고 평범한 일을하기 위해 여분의 루프를 실행해야합니다.

또한, 나를 위해 일한 것은 "디버그"에서 링크 타임 최적화를 "모노 리식"에서 "아니오"(xcode 8)로 변경 한 것이 었습니다.


Xcode = 패키지 관리자 없음, 자동 완성 및 기타 기능이 작동하고 컴파일 시간이 엄청납니다.
zirinisp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.