it-source

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

criticalcode 2023. 5. 11. 21:33
반응형

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

Xcode는 객체를 인쇄할 때 오류를 표시합니다.po <objectName>단 하나의 프로젝트에 대해서만.

스크린샷

오류: 구조체를 구현할 수 없습니다. 변수 <varName>의 크기가 실행에서 오류가 발생하여 준비할 수 없습니다. JIT 표현식

Xcode 디버거는 또한 모든 객체를 다음과 같이 표시합니다.nil(self제외), 그렇지 않은 경우(NSLog는 이미지에서 보는 바와 같이 올바른 출력을 보여줍니다.그 프로젝트에 무슨 문제가 있는지 모르겠습니다.다른 모든 프로젝트는 잘 작동합니다.

그게 무엇인지 아십니까? (프로젝트를 청소하는 것은 아무 효과가 없었습니다.)

릴리스 모드가 아닌 것이 확실합니까?

변수 값을 보려면 "디버그 모드"에 있어야 합니다(시작/중지 단추 근처의 왼쪽 상단 모서리에서 프로젝트 이름을 클릭한 다음 "구성 편집..."을 클릭하십시오). 그런 다음 "실행" 설정, "정보" 탭, "빌드 구성"을 차례로 선택합니다.여기서 "디버그"를 설정합니다.만약 그것이 "릴리스"에 있었다면 그것은 당신이 모든 닐을 본 문제입니다.)

디버깅 구성에 대한 "최적화 수준"을 "없음"으로 설정했는데 문제가 해결되었습니다.

  • 프로젝트로 이동Build settings
  • 서치Debug
  • 아래Apple Clang - Code Generation확인.Optimization Level
  • 세트Debug로.None [-OO]

그런 다음 디버그 영역 또는 콘솔에서 변수 값을 볼 수 있습니다.여기에 이미지 설명 입력

구성표 설정에서 주소 검사기가 꺼져 있는지 확인합니다.주소 검사기가 디버거에서 제대로 작동하지 않습니다.

  1. Edit Scheme (Product >> Scheme >> Edit Scheme)으로 이동하고 Run을 선택한 다음 Diagnostics 탭으로 이동합니다.
  2. "주소 삭제 사용"이 해제되었는지 확인합니다.

여기에 이미지 설명 입력

모든 사람들은 각자의 해결책이 있는 것 같습니다.

저는.Objective-C그리고.Swift동시에

먼저, 로 이동합니다.TARGETS -> Build Settings검색합니다.code generation

찾을 수 있을 것입니다Apple LLVM 6.0그리고.Swift Compiler

변경 내용Optimization Level에 이르기까지None그런 다음 디버그, 값이 아닐 수도 있습니다.nil

놀랍게도 일단 당신이 가치를 볼 수 있게 되면, 당신은 이 문제를 영구적으로 해결할 수 있고, 그러면 당신은 그것을 바꿀 수 있습니다.Optimization Level예전처럼.

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

필터링된 디버그 출력

저에게 Xcode는 디버거 출력을 필터링하고 있었습니다.출력 설정이 Debugger Output 또는 All Output인지 확인합니다.

저는 이 문제에 직면했고 그것이 다음과 같은 이유라는 것을 발견했습니다.Deployment Postprocessing = YES설정을 클릭합니다.

를 변경내로 NO아래 스크린샷에서 보는 것처럼 수정했습니다.

여기에 이미지 설명 입력

Xcode 버전: OSX 10.9.5에서 6.0.1(6A317)

저도 비슷한 문제에 부딪혔을 뿐입니다.어느 순간 Xcode 디버거는 값으로 초기화되었지만 일부 개체 유형, 특히 NSS 문자열을 (null)로 인쇄했습니다.다음을 통해 인쇄됨

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

개체에 대한 올바른 값이 표시되었습니다.

혼란스럽군요!문제를 해결하는 것은 꽤 쉬웠습니다.방금 Xcode를 종료하고 컴퓨터를 다시 시작했습니다.Xcode를 다시 시작한 후 모든 것이 다시 정상적으로 작동합니다 :).

ㅠㅠLink-Time Optimization = No디버그 모드로 설정할 수 있습니다.

  1. 파생 데이터 삭제
  2. Quite Xcode / 다시 시작
  3. 프로젝트 정리

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

이 볼 수 있는 것입니다.error: <EXPR>:1:1: error: use of unresolved identifier하려고 할 때마다po변광성

나에게 해결책은 다음으로 가는 것이었습니다.Build Settings.Optimization Level그리고 각각을 확인합니다.Debug설정이 다음으로 설정되었습니다.None.

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

이 문제도 발생했는데 릴리스 모드에 있는 것을 발견하면 디버깅으로 전환합니다.고정불변의알고보니 청소를 먼저 해야 했습니다(cmd+shift+k).

그래서 저는 릴리스 모드에서 빌드된 후 모든 것이 개발에서 다시 컴파일되지 않고 soldb가 기호를 제대로 읽을 수 없다고 생각합니다.청소를 하고 개발을 다시 컴파일한 후에 저에게 효과가 있었습니다.

는 매우 되었을 때 이 문제에 했습니다. - 하지만 이 를 인쇄하려고 나는매구인방로의으식이추존성을었가때다되니실이행습 -했것은작그동하만지무 -당하당됩얻인게다니은신면고를려하쇄가언이서에프크신이워임레우제문체적를▁get▁i▁when▁something▁on▁you▁problem됩얻당게다니나은▁some신▁from하▁thisency▁but▁was▁ran면▁depend▁added▁when▁you▁framework▁it▁-▁this▁way▁in는▁to고인려하▁specific▁print▁aerror

솔루션은 일반적인 방식으로 이 종속성을 추가하는 것이었습니다.

현실은 시스템이 즉시 작동해야 하며 여러 가지 설정에 대한 링크로 인해 작동하거나 작동하지 않을 수도 있습니다.

디버깅 모드에서는 Apple만이 대답할 수 있는 수수께끼인데(그들이 신경을 썼는지, 최근에는 신경을 썼는지 의심이 가는데) 시스템이 항상 디버깅을 허용하지 않는 이유는 무엇입니까?

결국 debug/non-debug의 차이는 메모리/디스크 공간만 채우는 메타데이터가 있는 추가 테이블일 것입니다.

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

그래서 우리는 아주 기본적이고 단순한 일을 하기 위해 여분의 루프를 운영해야 합니다. 지난 세기 이래로 제가 알고 있는 모든 것들은 잘 해내고 있습니다.

또한 "Debug"에서 링크 시간 최적화를 "Monolithic"에서 "No"(xcode 8)로 변경했습니다.

언급URL : https://stackoverflow.com/questions/19870176/xcode-debugger-doesnt-print-objects-and-shows-nil-when-they-arent

반응형