web-dev-qa-db-ja.com

'プロジェクト名'は最適化されてコンパイルされています - ステッピングは奇妙に振る舞うかもしれません。変数は利用できないかもしれません

AFNetworkingコードにステップインしようとすると、次の警告が生成されます。

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

そしてもちろん、コードをデバッグすることはできません。具体的に言うと、私はUIImageView+AFNetworkingカテゴリをデバッグしようとしていますが、これは不可能と思われます。コードを変更しても効果はありません(NSLogなどを試してみました)。コンパイラをステップインしようとすると、アセンブリコードに移動し、コードベースのどこにも存在しないカテゴリ名としてUIImageView+TVASTAFNetworkingが表示されます。

enter image description here

Xcode 7を使用する。iOS 9および8。Cocoapods(フレームワークなし)

UPDATEリリース設定とデバッグ設定の両方で、オプティマイザがnoneに設定されていることを言及するのを忘れていて、実際にはDebug configを使用しています。

enter image description here

UPDATE 2

Strip Debug Symbolsもオフになっています。

195
Mojtaba

それは長い時間でしたが、私はついに問題を解決しました。 3つ目の最適化フラグLTOまたはLink Time Optimizationがありますが、驚くことにここでそれを言及した人はいません。ここに掲載されている多くのスクリーンショットからわかるように、Optimization Level設定のすぐ上にあります。

要約すると、デバッグのためにオフにしたい3つの異なる最適化フラグがあります。

  • LLVMリンク時間最適化(-flto
  • LLVM最適化レベル(-O
  • Swift Compiler最適化レベル

enter image description here

LTOに関するさらに詳しい情報: http://llvm.org/docs/LinkTimeOptimization.html

6
Mojtaba

プロジェクトがSwiftを使用している場合、プロジェクト/ターゲット設定には2つの別々の「最適化レベル」設定があります。

両方とも正しく設定してください。

  1. プロジェクトナビゲータペインでプロジェクトを選択します
  2. 「プロジェクト」ツリーの下でプロジェクトの設定を選択します
  3. [ビルド設定]タブをクリックします
  4. 「最適化レベル」を検索すると、LLVM用とSwift用の2つの設定が表示されます。
  5. 問題のビルド設定に適切な設定(LLVMの場合はNone [-O0]、Swiftの場合はNone [-0none])を設定します。

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

これを行うことは私にとってその警告を解決しました。

150
Albert Bori

プロジェクトがリリースモードになっているようです。リリースモードではアプリを多数の最適化でコンパイルしますが、デバッガは最適化を嫌うので、アプリを確実にデバッグするには、最適化を減らして多数のデバッグ情報を追加するデバッグモードに切り替える必要があります。デバッグモードに切り替えるには:

  • Xcodeの左上隅にあるスキームをクリックしてください。

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

  • [スキームを編集...]を選択します

Select "Edit Scheme..."

  • "Build Configuration"ドロップダウンをクリックしてください。それをデバッグモードに変更します。

Click on the "Build Configuration" dropdown.

111
NobodyNada

この警告は、ブレークポイントに到達し、ソースが最適化が有効になっているプロジェクト内にあり、実際の変数値を見ることができない場合にのみ表示されます(すべてのオブジェクトがnilとして表示されない場合でも)

私の場合、それはcocoapodの依存関係を通して段階的にデバッグしているときにだけ起こりました。

そのため、メインターゲットとプロジェクトの設定が正しく設定されていても(Strip Debug Symbol = OFF、およびOptimization level None)、Podプロジェクトとブレークポイントが一致していることを確認する必要があります。

enter image description here

50
Gomino

おそらくコンパイラの最適化が原因で、古いプロジェクト(Xcode 7.x +)を新しいXcode 8.3(8E162)にインポートした後、Swift Compiler - Optimization Levelがデフォルトで高速単一ファイル最適化

Before

Noneに変更して問題を解決しました:

after

13
valvoline

Editor - > Validate Settingsは全ての変更を確認します。それならあなたは なるはずですSwift Compiler Optimisation Level in place

デバッグをNoneに設定します。

11
james sa

これは私のための解決策でした...

Cocoapodを使用している場合、giminoの答えに沿って、Podfileに次のような行を追加します。

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

またはcocoapodsバージョンが1.0以上の場合(Diejmonに感謝)

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

MyProjectには、標準の「デバッグ」の他に、デバッグ構成として「デバッグ - ローカル」、「デバッグ - ステージング」、「デバッグ - プロダクション」があります。

デフォルトでは、cocoapodsは通常Releaseとしてpod設定を生成します、このPodfile行はそれらがデバッグであることをそれに伝えることを可能にします。

8
wils

私は今日同じ問題に出くわし、そして(少なくとも私の場合は)それを考え出した。私もCocoaPodsを使っています、そして私は私のテストターゲットを実行しているときにこの問題を抱えていました(SwiftとObjCが混在している)。

私はXcode 7.2をiOS 9.2 SDKと共に使っています。

下の画像では、変更前のターゲットとプロジェクトの最適化を確認できます。

optimization level before change

驚くべきことに、解決された最適化がなし[-O0]であっても、プロジェクト設定をから変更した後にのみ - Os to - O0は、コンパイラーがターゲットの最適化を停止しました。

以下に、私の最終設定を見ることができます。

optimization level after change

7
André Neves

あなたのデバッグ設定がコードを最適化しないということですか?誤ってデバッグ設定の最適化を有効にしているようで、ターゲットの設定からそれをオフにする必要があります。

1
Can Poyrazoğlu

Cライブラリを内部的に使用するポッドをデバッグしているときに誰かがこの問題に直面している場合に備えて、スレッドにリストされている他のすべてに加えて、プロジェクト設定を変更する必要があります。

Podsプロジェクト設定 - >あなたのC-usingターゲット - >ビルド設定 - > Apple Clang - カスタムコンパイラフラグ - >その他のCフラグに行き、どういうわけかそこに着いた-O3フラグを削除してください。

0
Dmitry Serov

これは単純化しすぎかもしれませんが、リリース用に最適化しているのか(SwiftやLLVMからシンボルを削除するために)最適化しているのでしょうか?その場合は、スキーマを編集して[デバッグ]に切り替えるか、[SwiftまたはLLVM最適化用のビルド設定]を[なし(0)]に編集します。

0
Aaron

このエラーは2回発生しましたが、いずれの場合もサービスを要求するために使用されたURLパラメータの間違いでした。あるケースではURLのportセクションにスペースがあり、他のケースではオプションの値がラップされていませんでした。

そのため、修正はリクエストのURLが正しい形式であることを確認することでした。私のケースに関するより多くの情報、そして同じことをここで報告する。

0
le0diaz

私のしたことは、自分のプロジェクトをクリーン(Product > Clean)にして、もう一度実行することです。

0
raed