'프로젝트 이름'은 최적화로 컴파일되었습니다. 스테핑이 이상하게 작동 할 수 있습니다. 변수를 사용할 수 없습니다


211

AFNetworking 코드로 들어 가려고하면 다음 경고가 생성됩니다.

[Project Name] was compiled with optimization - stepping may behave oddly; variables may not be available.

물론 코드를 디버깅 할 수 없습니다. 구체적으로 말하면 UIImageView+AFNetworking불가능한 범주 를 디버깅하려고합니다 . 코드를 변경해도 아무런 영향을 미치지 않으며 (시도 NSLog등) 컴파일러에서 단계를 시도 할 때 어셈블리 코드로 이동 UIImageView+TVASTAFNetworking하여 코드베이스에 존재하지 않는 카테고리 이름으로 표시 됩니다.

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

Xcode 7. iOS 9 & 8 사용. Cocoapods (프레임 워크 없음)

업데이트 최적화 프로그램이 none릴리스 및 디버그 구성 모두 에 대해 설정되어 있으며 실제로 Debugconfig를 사용하고 있음을 언급하지 않았습니다.

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

업데이트 2

Strip Debug Symbols 꺼져 있습니다.


일종의 "스트립 디버그 심볼"옵션이 있다고 생각합니다. 아마도이 문제가 발생했을 것입니다. 꺼져 있습니까?
NobodyNada

1
@NobodyNada 예가 Strip Debug Symbols꺼져 있습니다.
Mojtaba

이상한 방금 Strip Debug Symbol을 켜려고했는데 경고가 사라졌습니다. 8- |
Gomino

@Mojtaba Hey, 문제를 해결하는 방법을 찾았습니까?
Hadu

@Hadu : 불행하게도
Mojtaba

답변:


175

프로젝트에서 Swift를 사용하는 경우 프로젝트 / 대상 구성에 두 개의 "최적화 수준"설정이 있습니다.

둘 다 올바르게 설정했는지 확인하십시오.

  1. 프로젝트 네비게이터 분할 창에서 프로젝트를 선택하십시오.
  2. "PROJECT"트리에서 프로젝트 설정을 선택하십시오
  3. "빌드 설정"탭을 클릭하십시오
  4. "최적화 수준"을 검색하면 LLVM과 빠른 설정의 두 가지 설정이 표시됩니다.
  5. 해당 빌드 구성에 대한 적절한 설정 ( None [-O0]LLVM 및 None [-0none]Swift)을 설정하십시오.

최적화 스테핑으로 컴파일되었으며 홀수 변수가 작동하지 않을 수 있음

이렇게하면 경고가 해결되었습니다.


1
혼합 언어 프로젝트는 무엇입니까?
Vive

LLVM과 Swift의 차이점은 무엇입니까? 그것은 스위프트 내가 프로젝트에 쓴 내가 좋아하는 디버거 즉 일에 디버깅에 관해서하고있어 어떤 LLVM가 무엇 점이다 po, p, expr...?
Honey

124

프로젝트가 릴리스 모드 인 것 같습니다. 릴리스 모드는 많은 최적화로 앱을 컴파일하지만 디버거는 최적화를 싫어하므로 앱을 안정적으로 디버깅하려면 최적화를 줄이고 디버그 정보를 추가하는 디버그 모드로 전환해야합니다. 디버그 모드로 전환하려면 :

  • Xcode의 왼쪽 상단에서 구성표를 클릭하십시오.

Xcode의 왼쪽 상단에서 구성표를 클릭하십시오.

  • "구성표 편집 ..."을 선택하십시오.

"구성표 편집 ..."을 선택하십시오.

  • "빌드 구성"드롭 다운을 클릭하십시오. 디버그 모드로 변경하십시오.

"빌드 구성"드롭 다운을 클릭하십시오.


8
디버그를 사용하고 있습니다. 옵티마이 저가 꺼져 있는지 확인하십시오.
Mojtaba

이것은 흥미 있었다. 또한 릴리스 모드로 설정했기 때문에 일부 중단 점에 도달하지 않은 반면 다른 일부에 도달하면 ¯_ (ツ) _ / ¯
Honey

60

이 경고는 중단 점에 도달하고 소스가 최적화가 활성화 된 프로젝트에있는 경우에만 나타나 실제 변수 값을 볼 수 없습니다 (모든 오브젝트가없는 경우에도 nil로 표시됨)

필자의 경우 Cocoapod 종속성을 단계별로 디버깅 할 때만 발생했습니다.

따라서 기본 대상 및 프로젝트 설정이 올바르게 설정되어 있어도 (Strip Debug Symbol = OFF 및 최적화 수준 없음), Pod 프로젝트에서 중단 점에 도달 한 것과 동일해야합니다.

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


다른 답변을 읽으면 동일한 제안입니다. 하지만 내 프로젝트의 모든 떨어져 있습니다 (일명 None [-O0])
Mojtaba

2
나는 그것이 당신이 나의 제트기에서 나와 있다고 말했지만, 포드 의존성 프로젝트 구성을 살펴 보셨습니까?
Gomino

Xcode 7과 동일한 문제입니다. trachkerbird 라이브러리 사용을 시작했을 때 문제가 발생했을 수 있습니다. 그러나 중단 점은 내 자신의 코드 안에 있습니다.
Mike

1
포드 프로젝트의 경우 "PROJECT"최적화 레벨 설정을 없음으로 변경하십시오. (포드 대상에 대한 변경 사항 없음).
ooops

2
이것은 올바르지 않습니다. pod install다시 하면 재정의됩니다 . 를 변경 같은 .
Iulian Onofrei

13

이전 프로젝트 (Xcode 7.x +)를 새로운 Xcode 8.3 (8E162)으로 가져온 후 아마도 컴파일러 최적화로 인해 Swift Compiler-Optimization Level 이 기본적으로 Fast, Single-File Optimization 으로 설정되었습니다 .

전에

없음으로 변경하면 문제가 해결되었습니다.

후


내가 해냈어 나를 위해 일하지 않았다. Unity가 생성 한 iOS 빌드 에서이 문제에 직면하고 있습니다.
Chandni

11

Editor-> Validate Settings그런 다음 모든 변경 사항을 확인하십시오. 그럼 당신은 얻을신속한 컴파일러 최적화 수준

디버그를로 설정하십시오 None.


1
내가 해냈어 나를 위해 일하지 않았다. Unity가 생성 한 iOS 빌드 에서이 문제에 직면하고 있습니다.
Chandni

9

이것은 나를위한 해결책이었습니다 ...

gimino의 대답을 따라 cocoapod를 사용하는 경우 Podfile에 다음과 같은 줄을 추가하십시오.

xcodeproj 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

또는 cocoapods 버전이 1.0보다 큰 경우 (Dijmon 덕분에)

project 'MyProject', 'Debug - local'=>:debug, 'Debug - staging'=>:debug, 'Debug - PRODUCTION'=>:debug

MyProject에는 표준 'Debug'외에도 디버그 구성으로 'Debug-local', 'Debug-staging', 'Debug-PRODUCTION'이 있습니다.

기본적으로 cocoapod는 일반적으로 Pod 구성을 Release로 생성합니다.이 Podfile 행을 사용하면 디버그 구성을 알 수 있습니다.


9

나는 오늘 같은 문제에 부딪 쳤고 (적어도 나의 경우에는) 알아 냈습니다. CocoaPods도 사용하고 있는데 테스트 대상 (Swift와 ObjC 혼합)을 실행할 때이 문제가 발생했습니다.

iOS 9.2 SDK와 함께 Xcode 7.2를 사용하고 있습니다.

아래 이미지에서 변경 전에 대상과 프로젝트에 대한 최적화를 볼 수 있습니다.

변경 전 최적화 수준

놀랍게도 해결 된 최적화가 없음 [-O0] 이지만 프로젝트 설정을 -Os 에서 -O0으로 변경 한 후에 만 컴파일러가 대상 최적화를 중지 한 것입니다.

아래에서 내 최종 설정을 볼 수 있습니다.

변경 후 최적화 수준


7

오랜 시간이 지났지 만 마침내 문제를 해결했습니다. 세 번째 최적화 플래그가 LTO있거나 Link Time Optimization놀랍게도 아무도 여기에 언급하지 않았으며 어떤 이유로 든 나는 그것에주의를 기울이지 않았습니다. Optimization Level여기에 게시 된 많은 스크린 샷에서 볼 수 있듯이 설정 바로 위에 있습니다.

요약하면 디버깅을 위해 끄고 싶은 3 가지 최적화 플래그가 있습니다.

  • LLVM 링크 시간 최적화 ( -flto)
  • LLVM 최적화 수준 ( -O)
  • 스위프트 컴파일러 최적화 수준

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

LTO에 대한 추가 정보 : http://llvm.org/docs/LinkTimeOptimization.html


2
내가 해냈어 나를 위해 일하지 않았다. Unity가 생성 한 iOS 빌드 에서이 문제에 직면하고 있습니다.
Chandni

@Chandni, 여기에서 같은 문제에 직면 해 해결책을 찾았습니까?
Ranjani

2

Swift 포드에 대해 최적화를 비활성화하여 디버깅 할 수 있도록하려면에 다음을 추가하십시오 Podfile. 디버그 빌드에 대해서만 최적화가 비활성화됩니다.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      if config.name == "Debug"
        config.build_settings["SWIFT_OPTIMIZATION_LEVEL"] = "-Onone"
      end
    end
  end
end

1

디버그 구성이 코드를 최적화하지 않습니까? 실수로 디버그 구성에 대한 최적화를 활성화 한 것으로 보이며 대상 설정에서 해제해야합니다.


3
모든 것이 최적화되지 않았습니다. 심지어 릴리스 빌드는 확인합니다
Mojtaba

@Mojtba 그러나 릴리스 모드는 최적화를 켭니다!
NobodyNada

0

이 오류는 두 번 나에게 발생했으며 모든 경우에 서비스를 요청하는 데 사용되는 URL 매개 변수에서 실수가 발생했습니다. 어떤 경우에는 URL에 포트 섹션에 약간의 공간이 있었으며 다른 경우에는 일부 선택적 값이 래핑되지 않았습니다.

따라서 수정은 요청의 URL이 올바르게 구성되었는지 확인하는 것이 었습니다. 내 사례에 대한 자세한 정보 및 이와 유사한보고는 여기 에서 동일 합니다 .


0

내가 한 일은 Product > Clean내 프로젝트 를 정리 ( )하고 다시 실행하는 것입니다.


0

이것은 지나치게 단순화되었을 수 있지만 릴리스 또는 최적화 (Swift 또는 LLVM에서 기호를 제거)로 빌드하고 있습니까? 그렇다면 구성표를 편집하고 디버그로 전환하거나 신속한 또는 LLVM 최적화를위한 빌드 설정을 없음 (0)으로 편집하십시오.


0

내부적으로 C 라이브러리를 사용하는 포드를 디버깅하는 동안 누군가이 문제에 직면하는 경우 스레드에 나열된 다른 모든 것 외에도 프로젝트 설정을 변경해야합니다.

포드 프로젝트 설정-> C-using 대상-> 빌드 설정-> Apple Clang-사용자 정의 컴파일러 플래그-> 기타 C 플래그로 이동하여 -O3어떻게 든 플래그를 제거하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.