'Proje Adı' optimizasyonla derlendi - adımlama tuhaf davranabilir; değişkenler mevcut olmayabilir


211

AFNetworking koduna adım atmaya çalışmak aşağıdaki uyarıyı üretir:

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

Ve elbette kodu hata ayıklayamıyorum. Spesifik olarak, UIImageView+AFNetworkingimkansız görünen kategoride hata ayıklamaya çalışıyorum . Kodun değiştirilmesinin bir etkisi yoktur (denenmiş NSLog, vb.) Ve derleyicilere adım atmaya çalışırken derleme koduna gider UIImageView+TVASTAFNetworkingve kod tabanının herhangi bir yerinde bulunmayan kategori adı olarak gösterilir .

resim açıklamasını buraya girin

Xcode 7'yi kullanma. İOS 9 ve 8. Cocoapod'lar (Çerçeve yok)

GÜNCELLEME Optimize Edici'nin nonehem sürüm hem de hata ayıklama yapılandırması için ayarlandığını belirtmeyi unuttum ve aslında Debugconfig kullanıyorum .

resim açıklamasını buraya girin

GÜNCELLEME 2

Strip Debug Symbols O da kapalı.


Bir çeşit "Şerit Hata Ayıklama Sembolleri" seçeneği olduğunu hatırlıyorum. Bu muhtemelen bu soruna neden olur. Kapalı mı?
NobodyNada

1
@ KimseNada Evet Strip Debug Symbolskapalı.
Mojtaba

Garip Sadece Şerit Hata Ayıklama Sembolü açmaya çalıştım ve uyarı kayboldu 8- |
Gomino

@Mojtaba Hey, sorunu nasıl çözeceğinizi öğrendiniz mi? Xcode 7
Hadu

@Hadu: Ne yazık ki hayır
Mojtaba

Yanıtlar:


175

Projeniz Swift kullanıyorsa, proje / hedef yapılandırmasında iki ayrı "Optimizasyon Düzeyi" ayarı vardır.

Her ikisini de doğru ayarladığınızdan emin olun:

  1. Proje Gezgini bölmesinde projenizi seçin
  2. "PROJE" ağacından projenizin ayarlarını seçin
  3. "Oluşturma Ayarları" sekmesini tıklayın
  4. "Optimizasyon Seviyesi" ni arayın, biri LLVM ve diğeri hızlı olmak üzere iki ayar görürsünüz.
  5. Söz konusu yapı yapılandırması için uygun ayarı ( None [-O0]LLVM ve None [-0none]Swift için) belirleyin.

optimizasyon ile derlenmiş adım garip davranabilir olabilir değişkenler mevcut olmayabilir

Bunu yapmak benim için uyarıyı çözdü.


1
Karma dil projelerinde ne var ...?
Vive

LLVM ve Swift arasındaki fark nedir? Swift, projede yazdığım şey mi ve LLVM, hata ayıklayıcıda hata ayıklama konusunda yaptığım her şey için mi po, yani ... p, expr...?
Tatlım

124

Projenizin Yayınlama modunda olduğu anlaşılıyor. Sürüm modu, uygulamayı birçok optimizasyonla derler, ancak hata ayıklayıcılar optimizasyonlardan nefret eder, bu nedenle uygulamada güvenilir bir şekilde hata ayıklamak için, optimizasyonu azaltan ve bir grup hata ayıklama bilgisi ekleyen Hata Ayıklama moduna geçmeniz gerekir. Hata Ayıklama moduna geçmek için:

  • Xcode'un sol üst köşesindeki şemanıza tıklayın.

Xcode'un sol üst köşesindeki şemanıza tıklayın.

  • "Şemayı Düzenle ..." yi seçin

"Şemayı Düzenle ..." yi seçin

  • "Yapılandırma Oluştur" açılır menüsünü tıklayın. ve Hata Ayıklama moduna değiştirin.

"Yapılandırma Oluştur" açılır menüsünü tıklayın.


8
Hata ayıklama kullanıyorum. ve optimize edicinin KAPALI olduğundan emin olun.
Mojtaba

Bu ilginçti. Ayrıca Yayın moduna ayarladığım için, bazı kesme noktalarım vurulmuyordu, bazıları ise vuruldu ¯_ (ツ) _ / ¯
Honey

60

Bu uyarı yalnızca bir kesme noktasına çarptığınızda ve kaynak, optimizasyonun etkinleştirildiği bir projedeyken görünür ve gerçek değişken değerlerini izlemenizi önler (olmasa bile her nesne nil olarak gösterilir)

Benim durumumda, sadece bir cocoapod bağımlılığı ile adım adım hata ayıklama sırasında oldu.

Bu nedenle, ana hedef ve proje ayarlarınız doğru bir şekilde ayarlanmış olsa bile (Şerit Hata Ayıklama Sembolü = KAPALI ve Optimizasyon düzeyi Yok), kesme noktasına çarptığınız Pod projesi için aynı olduğundan emin olmanız gerekir.

resim açıklamasını buraya girin


Diğer cevapları okuyun, onlar da aynısını öneriyorlar. ama hepsi benim None [-O0]
projemde

2
Tıpkı benimki gibi projektörünüzde kapalı olduğunu söylediğinizi biliyorum, ama Pod bağımlılık projeleri yapılandırmanıza bir göz attınız mı?
Gomino

Burada Xcode 7 ile aynı sorun. Muhtemelen trachkerbird kütüphanesini kullanmaya başladığımda sorun ortaya çıktı. Ancak kesme noktası kendi kodumda.
Mike

1
Kapsüller projesi için "PROJECT" optimizasyon düzeyi ayarını None works olarak değiştirin. (herhangi bir kapsül hedefi için değişiklik yok).
ooops

2
Bu yanlış. pod installTekrar yaptığınızda geçersiz kılınır . Değiştir böyle .
Iulian Onofrei

13

Muhtemelen derleyici optimizasyonu nedeniyle eski bir projeyi (Xcode 7.x +) yeni Xcode 8.3'e (8E162) aktardıktan sonra Swift Derleyici - Optimizasyon Seviyesi varsayılan olarak Hızlı, Tek Dosya Optimizasyonu olarak ayarlanmıştır :

Önce

Hiçbirini değiştirmek, sorunu çözdü:

sonra


Yaptım. Benim için çalışmadı. Birlik tarafından üretilen ios derlemesinde bu sorunla karşı karşıyayım.
Chandni

11

Editor-> Validate Settingssonra tüm değişiklikleri onaylayın. O zaman almalısınSwift Derleyici Optimizasyon Seviyesi mevcut

Hata Ayıklama olarak ayarlayın None.


1
Yaptım. Benim için çalışmadı. Birlik tarafından üretilen ios derlemesinde bu sorunla karşı karşıyayım.
Chandni

9

Bu benim için bir çözümdü ...

Gimino'nun cevap satırları boyunca, cocoapods kullanıyorsanız, Podfile'a böyle bir satır ekleyin:

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

veya cocoapods versiyonları için> = 1.0 (teşekkürler Diejmon)

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

MyProject, standart 'Hata Ayıklama'ya ek olarak hata ayıklama yapılandırmaları olarak' Hata Ayıkla - yerel ',' Hata Ayıklama - hazırlama ',' Hata Ayıklama - ÜRETİM 'olduğunda

Varsayılan olarak, cocoapod'lar genellikle Release olarak pod yapılandırmaları oluşturur, bu Podfile satırı hata ayıklandıklarını söylemenizi sağlar.


9

Bugün aynı konuyla karşılaştım ve anladım (en azından benim durumumda). Ayrıca CocoaPods kullanıyorum ve test hedefimi (Swift, ObjC ile karışık) çalıştırırken bu sorunu yaşıyordum.

İOS 9.2 SDK ile Xcode 7.2 kullanıyorum.

Aşağıdaki görüntüde, değişikliğimden önce hedef ve proje optimizasyonlarını görebilirsiniz:

değişiklikten önce optimizasyon seviyesi

Şaşırtıcı olan şey, çözümlenmiş Optimizasyon Yok [-O0] olmasına rağmen , sadece proje ayarını -Os'dan -O0'a değiştirdikten sonra hedefi optimize derleyici durağı yaptı.

Aşağıda son ayarlarımı görebilirsiniz:

değişimden sonra optimizasyon seviyesi


7

Uzun zaman oldu ama sonunda sorunu çözdüm. Üçüncü bir optimizasyon bayrağı var LTOya da Link Time OptimizationŞaşırtıcı kimse burada bahsetmedi ve nedense buna da dikkat etmedim. Tam orada,Optimization LevelBurada yayınlanan birçok ekran görüntüsünde görebileceğiniz gibi ayarın .

Özetlemek gerekirse, hata ayıklama için kapatmak istediğiniz 3 farklı optimizasyon bayrağı vardır:

  • LLVM Bağlantı Süresi Optimizasyonu ( -flto)
  • LLVM Optimizasyon Seviyesi (-O )
  • Swift Derleyici Optimizasyon Seviyesi

resim açıklamasını buraya girin

LTO hakkında daha fazla bilgi: http://llvm.org/docs/LinkTimeOptimization.html


2
Yaptım. Benim için çalışmadı. Birlik tarafından üretilen ios derlemesinde bu sorunla karşı karşıyayım.
Chandni

@Chandni, Burada aynı problemle karşılaştım çözümü buldunuz mu?
Ranjani

2

Swift bölmelerinizde hata ayıklayabilmeniz için optimizasyonları devre dışı bırakmanız gerekirse, aşağıdakileri cihazınıza ekleyin Podfile. Bu, yalnızca hata ayıklama derlemeleri için optimizasyonları devre dışı bırakır.

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

Hata ayıklama yapılandırmanızın kodu optimize etmediğinden emin misiniz? Hata ayıklama yapılandırması için yanlışlıkla optimizasyonları etkinleştirdiğiniz anlaşılıyor ve bunu hedefin ayarlarından kapatmanız gerekiyor.


3
optimizasyon her şey için kapalı. bile emin olmak için inşa serbest bırakın
Mojtaba

@Mojtba Ancak sürüm modu optimizasyonları açar!
NobodyNada

0

Bu hata bana iki kez oldu ve her durumda bir hizmet istemek için kullanılan URL parametresinde bir hata oluştu. Bir durumda, URL'nin bağlantı noktası bölümünde bir miktar boşluğu vardır, diğer durumda bazı İsteğe Bağlı Değerlerin paketinden çıkarılmamış olması.

Bu nedenle düzeltme, isteğin URL'sinin iyi oluşturulduğundan emin olmaktı. Davam hakkında daha fazla bilgi ve benzer raporlar burada .


0

Tek Product > Cleanyaptığım projemi temizlemek ( ) ve tekrar çalıştırmak


0

Bu aşırı basitleştirme olabilir, ancak Sürüm için veya optimizasyonla (Swift veya LLVM'den sembolleri kaldıran) çok yüksek bir bina mı oluşturuyorsunuz? Öyleyse düzeninizi düzenleyin ve Hata Ayıkla'ya geçin veya hızlı veya LLVM optimizasyonu için Derleme Ayarlarınızı Yok (0) olarak düzenleyin.


0

Birisinin dahili olarak C kütüphanesi kullanan bir bölmede hata ayıklarken bu sorunla karşı karşıya kalması durumunda, iş parçacığında listelenen her şeye ek olarak çalışmasını sağlamak için proje ayarlarında değiştirmeniz gereken başka bir şey daha vardır.

Kapsüller proje ayarlarına -> C kullanım hedefiniz -> Oluşturma Ayarları -> Apple Clang - Özel Derleyici Bayrakları -> Diğer C Bayrakları'na gidin ve -O3o şekilde var olan bayrağı kaldırın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.