web-dev-qa-db-fra.com

'Nom du projet' a été compilé avec optimisation - la progression peut se comporter étrangement; les variables peuvent ne pas être disponibles

Essayer d'entrer dans le code AFNetworking génère l'avertissement suivant:

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

Et bien sûr, je ne suis pas capable de déboguer le code. Pour être précis, j'essaie de déboguer la catégorie UIImageView+AFNetworking qui semble impossible. Changer le code n'a pas d'effet (NSLog essayé, etc.) et lors de la tentative de compilation dans les compilateurs, allez dans Code d'assemblage et affiche UIImageView+TVASTAFNetworking comme nom de catégorie qui n'existe nulle part dans la base de code.

 enter image description here

Utilisation de Xcode 7. iOS 9 et 8. Cocoapods (no Framework)

UPDATE J'ai oublié de mentionner que l'Optimizer est défini sur none pour la configuration de publication et de débogage et j'utilise en fait Debug config.

 enter image description here

UPDATE 2 

Strip Debug Symbols est également désactivé.

184
Mojtaba

Cela fait longtemps mais j'ai finalement résolu le problème. Il existe un troisième indicateur d'optimisation LTO ou Link Time Optimization et, chose surprenante, personne ne l'a mentionné ici et pour une raison quelconque, je n'y ai pas prêté attention. C'est juste au-dessus du réglage Optimization Level comme vous pouvez le voir dans de nombreuses captures d'écran publiées ici.

Donc, pour résumer, il y a 3 différents indicateurs d'optimisation que vous souhaitez désactiver pour le débogage:

  • Optimisation du temps de liaison LLVM (-flto
  • Niveau d'optimisation LLVM (-O)
  • Niveau d'optimisation du compilateur Swift 

 enter image description here

Plus d'informations sur LTO: http://llvm.org/docs/LinkTimeOptimization.html

6
Mojtaba

Si votre projet utilise Swift, la configuration projet/cible comporte deux paramètres distincts "Niveau d'optimisation". 

Assurez-vous de les définir correctement:

  1. Sélectionnez votre projet dans le volet du navigateur de projet.
  2. Sélectionnez les paramètres de votre projet sous l'arborescence "PROJECT"
  3. Cliquez sur l'onglet "Paramètres de construction"
  4. Recherchez "Niveau d'optimisation" et vous verrez deux paramètres, un pour LLVM et un pour Swift.
  5. Définissez le paramètre approprié (None [-O0] pour LLVM et None [-0none] pour Swift) pour la configuration de construction en question.

 was compiled with optimization stepping may behave oddlyvariables may not be available

Faire cela a résolu cet avertissement pour moi.

143
Albert Bori

Il semble que votre projet soit en mode Release. Le mode Release compile l'application avec beaucoup d'optimisations, mais les débogueurs détestent les optimisations. Par conséquent, pour déboguer l'application de manière fiable, vous devez passer en mode Debug, ce qui réduit l'optimisation et ajoute de nombreuses informations de débogage. Pour passer en mode débogage:

  • Cliquez sur votre schéma dans le coin supérieur gauche de Xcode.

Click on your scheme in the top-left corner of Xcode.

  • Sélectionnez "Edit Scheme ..."

Select "Edit Scheme..."

  • Cliquez sur le menu déroulant "Build Configuration". et changez-le en mode Debug.

Click on the "Build Configuration" dropdown.

105
NobodyNada

Cet avertissement n'apparaît que lorsque vous atteignez un point d'arrêt et que la source est dans un projet où l'optimisation est activée, ce qui vous empêche de voir les valeurs de variables réelles (chaque objet est affiché comme nul, même s'il ne l'est pas)

Dans mon cas, cela ne s'est produit que lors du débogage pas à pas via une dépendance au cocoapod. 

Ainsi, même si les paramètres de votre cible principale et de votre projet sont correctement définis (symbole de débogage à bande = OFF et niveau d'optimisation Aucun), vous devez vous assurer qu'il en est de même pour le projet Pod de votre point de rupture.

 enter image description here

48
Gomino

Il s’est avéré qu’après l’importation d’un ancien projet (Xcode 7.x +) dans le nouveau Xcode 8.3 (8E162), probablement à cause de l’optimisation du compilateur, le Compilateur Swift - Niveau d’optimisation était défini par défaut sur Fast, Single -Optimisation de fichier:

 Before

Le remplacer par aucun, résolut le problème:

 after

13
valvoline

Editor -> Validate Settings puis confirmez toutes les modifications. Ensuite, vous devriez obtenir  Swift Compiler Optimisation Level in place

Définissez Debug sur None

11
james sa

C'était la solution pour moi ...

Dans le sens de la réponse de gimino, si vous utilisez des cocoapodes, ajoutez une ligne comme celle-ci au fichier podfile:

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

ou pour les versions de cocoapods> = 1.0 (merci Diejmon)

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

Où MyProject a 'Debug - local', 'Debug - staging', 'Debug - PRODUCTION' comme configuration de débogage en plus du 'Debug' standard

Par défaut, les cocoapods génèrent généralement des configurations de pods comme Release, cette ligne Podfile vous permet de lui dire qu’il s’agit d’un débogage.

7
wils

J'ai rencontré le même problème aujourd'hui et je l'ai compris (du moins dans mon cas)… .. J'utilise aussi CocoaPods, et j'avais ce problème lorsque j'utilise ma cible de test (Swift mélangé avec ObjC).

J'utilise Xcode 7.2, avec iOS 9.2 SDK.

Dans l'image ci-dessous, vous pouvez voir les optimisations pour la cible et le projet avant mon changement:

 optimization level before change

La chose surprenante est que, même si l'optimisation résolue est None [-O0], ce n'est qu'après que le paramètre du projet est passé de -Os à -O0 que le compilateur a arrêté d'optimiser la cible.

Ci-dessous, vous pouvez voir mes réglages finaux:

 optimization level after change

7
André Neves

Êtes-vous sûr que votre configuration de débogage n'optimise pas le code (cela ne devrait pas)? Il semble que vous ayez activé accidentellement les optimisations pour la configuration de débogage et vous devriez le désactiver à partir des paramètres de la cible.

1
Can Poyrazoğlu

Juste au cas où quelqu'un serait confronté à ce problème lors du débogage d'un pod qui utilise une bibliothèque C en interne, vous devez également modifier les paramètres du projet pour le faire fonctionner en plus de tout ce qui est répertorié dans le fil.

Sélectionnez Paramètres du projet Pods -> Votre cible C-using -> Paramètres de construction -> Apple Clang - Indicateurs de compilation personnalisés -> Autres indicateurs C et supprimez l’indicateur -O3 qui y est parvenu.

0
Dmitry Serov

C'est peut-être une simplification excessive, mais construisez-vous pour la version ou avec l'optimisation (qui supprime les symboles de Swift ou de LLVM) trop élevée? Si tel est le cas, modifiez votre schéma et passez à Debug ou modifiez vos paramètres de construction pour l'optimisation Swift ou LLVM sur Aucun (0).

0
Aaron

Cette erreur m'est arrivée deux fois et, dans tous les cas, il s'agissait d'une erreur dans le paramètre d'URL utilisé pour demander un service. Dans un cas, l'URL disposait d'un espace dans la section du port, dans l'autre cas, une valeur facultative n'était pas décompressée. 

La solution était donc de s’assurer que l’URL de la demande est bien formé. Plus d'informations sur mon cas, et des informations similaires rapportant les mêmes ici

0
le0diaz

Tout ce que j'ai fait est de nettoyer (Product > Clean) mon projet et de l'exécuter à nouveau

0
raed