web-dev-qa-db-ja.com

Xcodeデバッガーはオブジェクトを出力せず、nilを表示します。

Xcodeは、po <objectName>でオブジェクトを印刷しようとするとエラーを表示しますが、1つのプロジェクトに対してのみです。

Screenshot

エラー:構造をマテリアライズできませんでした:変数<varName>のサイズがValueObjectのサイズと一致しません。実行でエラーが発生しました。PrepareToExecuteJITExpressionができませんでした。

また、Xcodeデバッガーは、すべてのオブジェクトがnilself除外)として表示されます(表示されない場合、NSLogは正しい出力を示します)。プロジェクトの何が問題なのかわかりません。他のプロジェクトはすべて正常に動作します。

それが何であるか考えていますか? (プロジェクトのクリーニングは効果がありませんでした。)

156
Binarian

「リリースモード」ではないのですか?

変数値を表示するには、「デバッグモード」にする必要があります(左上隅の開始/停止ボタンの近くにあるプロジェクト名をクリックし、「スキームを編集...」、「実行」設定、「 [情報]タブ、[ビルド構成]の順にクリックします。ここで[デバッグ]を設定します。[リリース]の場合は、すべての問題を確認できます)。

262
Mick

デバッグ構成の「最適化レベル」を「なし」に設定し、問題を解決しました。

35
Leszek Zarna

Scheme設定でAddress Sanitizerがオフになっていることを確認します。アドレスサニタイザーはデバッガーではうまく機能しません。

  1. [スキームの編集]([製品] >> [スキーム] >> [スキームの編集])に移動し、[実行]を選択して、[診断]タブに移動します。
  2. [アドレスサニタイザーを有効にする]がオフになっていることを確認します。

enter image description here

26
KIO

誰もが独自の解決策を持っているようです。

私にとっては、Objective-CSwiftを同時に使用します。

まず、TARGETS -> Build Settingsに移動してcode generationを検索します

Apple LLVM 6.0Swift Compilerが見つかります

Optimization Level allをNoneに変更してから、デバッグすると、nil以外の値が見つかる場合があります。

驚くべきことに、値を確認したら、この問題を永続的に解決し、Optimization Levelを以前のものに変更できます。

16
Artwalk

これが発生する他の方法があります。私にとっては、デバッグビルドであっても、「その他のCフラグ」の値が「-O2」に設定されていたためです。デバッグビルドでこれをオフにすると、問題が解決しました。

11
ThomasW

Filtered debug output

私にとって、Xcodeはデバッガーの出力をフィルターで除外していました。出力設定がデバッガー出力またはすべての出力であることを確認してください

8

この問題が発生したばかりで、ビルド設定のDeployment Postprocessing = YESが原因であることがわかりました。

これをNOに変更すると、次のスクリーンショットに示すように修正されました。

enter image description here

Xcodeバージョン:OSX 10.9.5の6.0.1(6A317)

6
Luke

私は同様の問題に出くわします:ある時点で、Xcodeデバッガーはいくつかのオブジェクト型、特にNSStringsを(null)として出力しましたが、値で初期化されました。経由で印刷

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

オブジェクトの正しい値が表示されました。

紛らわしい!問題の解決はかなり簡単でした。Xcodeをシャットダウンし、コンピューターを再起動しただけです。 Xcodeを再起動すると、すべてが再び正常に動作します:)。

5
Torsten Barthel

ビルド設定でデバッグモードのLink-Time Optimization = Noを確認してください。

5
llama591
  1. 派生データを削除する
  2. かなりのXcode /再起動
  3. クリーンプロジェクト

それは私にかかったすべてです。

3
TMin

ここでの解決策は、変数をpoしようとするたびにerror: <EXPR>:1:1: error: use of unresolved identifierが表示されるバグも修正します。

私にとっての解決策は、Build Settingsに移動してOptimization Levelを検索し、各Debug設定がNoneに設定されていることを確認することでした。

2
Kevin Xu

ビルド設定の「その他のCフラグ」に移動し、デバッグ値を-o2から-O0に設定します

1
Shauket Sheikh

私もこれに遭遇し、リリースモードになっていることがわかったとき、デバッグに切り替えます...修正なし。最初にきれいにする必要があることがわかりました(cmd + shift + k)。

だから、リリースモードでビルドした後、開発時にすべてが再コンパイルされるわけではないので、lldbはシンボルを正しく読み取ることができないと思います。開発でクリーニングと再コンパイルした後、それは私のために働いた。

0
Spencer Hall