web-dev-qa-db-ja.com

lldbが「エラー: 'id'への参照があいまいです」で変数値の出力に失敗する

Xcode 4.3に更新してデバッガーをlldbに切り替えたため、メンバー変数を印刷する要求はすべて次のエラーメッセージで失敗します。

(lldb) print request
error: error: reference to 'id' is ambiguous
note: candidate found by name lookup is 'id'
note: candidate found by name lookup is 'id'
error: 1 errors parsing expression

「自己」は大丈夫です:

(lldb) print self
(LoginViewController *) $6 = 0x1cd54d50

また、メンバー変数を出力する他の形式も失敗します。

(lldb) print self.request
error: property 'request' not found on object of type 'LoginViewController *'; did you mean to access ivar 'request'?
error: 1 errors parsing expression
(lldb) print self->request
error: error: reference to 'id' is ambiguous
note: candidate found by name lookup is 'id'
note: candidate found by name lookup is 'id'
error: 1 errors parsing expression

それ以外はすべて正常に動作しているようです。 Xcodeの変数ウィンドウは値を正しく取得できます。私はクリーンなビルドを試みて〜/ Library/Developer/Xcode/DerivedData /を削除しました。グーグルで同じ問題の他のインスタンスを明らかにしていません。

Appleの開発フォーラムで1つのスレッドを見つけましたが、解決策はありません。

https://devforums.Apple.com/message/623694

これをAppleにバグID#11029004として報告しました。

45
JosephH

私は1つの回避策を見つけました:

「製品」メニューの「スキームの編集」を使用し、左側のバーの「情報」タブで「実行」を選択し、デバッガーをgdbに変更します(これは、gdbがなくなったxcode 5には適用されません)。

どうやらApple彼らはxcode 4.3.1でこのバグを修正したと思ったが、それでも起こる。彼らが要求したいくつかの追加のデバッグ情報を提出したので、それが修正されることを望んでいるxcodeの次のリリース4.3.2ではまだ失敗しています。Appleからのアップデートについては https://devforums.Apple.com/message/623694 を参照してください。

[〜#〜]更新[〜#〜]

私は問題が発生したさまざまなケースを試しましたが、Xcode 4.4.1ではlldbですべて正常に動作しているようです。したがって、この問題が発生している場合はアップグレードすることを強くお勧めします。

39
JosephH

次の式で試してください。

p self.view.bounds.size.width

または使用、

po self.view

p-印刷は通常の値/単純な値の印刷にのみ使用され、po-印刷オブジェクトはNSLogと同じように機能してオブジェクトの値を印刷します

3
Bhavik Modi

使用する Edit scheme [製品]メニューの左側のバーにある[実行]を選択し、[情報]タブをクリックして、デバッガをgdbに変更します。

Product> Edit Scheme> Run(スキーム)> Build Configuration 3つのオプションがあります(一部には2つ1、2しか表示されない場合があります)1.デバッグ2.リリース3.アドホック

Debugに設定されているかどうかを確認し、設定されていない場合はデバッグしてください。

これは私がやっていた間違いでした

2
thesummersign

(Xcode5)これは実際には元の質問への直接の回答ではありませんが、関連があると思うので、追跡したように他の誰かが時間を浪費するとは考えたくありません。私が抱えていた問題は、デバッグウィンドウに変数値が表示されないことでした。

実際にコンパイラーに与えられている呼び出しを確認したところ、ワークスペース内のすべてのプロジェクトとターゲットが明示的に-O0に設定されているにもかかわらず、-Osで最適化されていることがわかりました。デバッグ。多くの検索の結果、各プロジェクトの「情報」セクションに「コマンドラインビルドにxxxを使用する」というオプションがあることがわかりました。xxxは、デバッグ/リリースまたは使用可能な構成です。ツールチップの説明によると、このオプションは、xcodebuildツールでコマンドラインを介して行われたビルドにのみ影響を与えるはずです(このツールは、コマンドラインオプションとして使用するスキームを完全に選択できるため、少し奇妙です)。とにかく、このオプションをDebugに変更すると、最終的にIDEが得られ、コンパイラに-O0と-gが欲しいと伝えました。同じワークスペースでXcode4でこれが起こったことを思い出しません。

また、この設定を変更する前にクリーンアップを実行することもできます。クリーニングせずに変更したところ、突然、一部のヘッダーファイルが見つかりませんでした(プリコンパイル済みヘッダーが正しく生成されていないようです)。さらに1時間ほど暗闇の中で突き刺した後、最初に上記のオプションを[リリース]に戻してクリーンにすると、デバッグに設定して正常にビルドできることがわかりました。

Xcode開発チームが実際にそれを使用しているかどうか誰かが知っていますか?そうではないという明確な印象を受けます。

1
iforce2d

Product-> Scheme-> New Scheme...に移動し、ターゲットの新しいスキームを作成します。 Product-> Cleanの下で製品をクリーンアップすると、アプリが正しく実行されます。

これを行うことで私の問題は解決しました。

0