web-dev-qa-db-ja.com

Xcodeデバッガー:変数の値を表示

UITableViewControllerの私のコード:

delegate.myData = [myData objectAtIndex:indexPath.row];

デバッガーでdelegate.myDataまたはindexPath.rowの値を確認するにはどうすればよいですか? delegate.myDataは配列で、indexPath.rowintでなければなりません。オブジェクトdelegateおよびindexPathのメモリアドレスのみが表示されますが、myDataおよびrowはどこにありますか?

alt text

96
Manni

これを確認してください XcodeデバッガーでNSDictionary変数の内容を表示する方法?

私も使用します

po variableName
print variableName

コンソールで。

あなたの場合、実行することが可能です

print [myData objectAtIndex:indexPath.row]  

または

po [myData objectAtIndex:indexPath.row]
132
Andriy

開発環境としてのXcodeには変数をデバッグする簡単な方法を含めるべきだという他のポスターに同意します。さて、朗報、ISがあります!

Xcodeで変数をデバッグする方法に関する簡単な回答/チュートリアルを検索していないのを見つけた後、Xcode自体を調べてみましたが、これは(少なくとも私にとって)非常に有用な発見でした。

Xcode 4.6.3で変数を簡単にデバッグする方法

Xcodeのメイン画面で、スクリーンショットに表示されている右上隅のボタンをクリックして、下部のデバッグ領域を確認してください。

Debug Area button

Debug Area in Xcode 4.6.3

次に、ブレークポイント(コード領域の境界線をクリックして、プログラムを一時停止するコード内の行)を設定します。

Breakpoint

デバッグ領域でこのボタンを探し、中央のボタンをクリックします。お住まいの地域が2つに分割されていることがわかります。

Split Debug Area

Should look like this

アプリケーションを実行します。

プログラムの実行中に最初のブレークポイントに到達すると、そのブレークポイントで使用可能なすべての変数が左側に表示されます。

Search Field

詳細については、変数の左矢印を展開できます。さらに、検索フィールドを使用して、必要な変数を分離し、ブレークポイントのスコープに「ステップイン」するときにリアルタイムで変数が変化することを確認します。

Step Into

デバッグ領域の右側で、目的の変数をマウスの右ボタンでクリックして、必要に応じて変数を印刷するために送信できます。

Contextual Menu

ご覧のとおり、そのコンテキストメニューには非常に興味深いデバッグオプションがたくさんあります。 Watchなど、入力されたコマンドで既に提案されているもの、あるいはEdit Value…変数のランタイム値を変更します!

22
Lex L.

また、次のことができます。

  1. ブレークポイントを設定して、実行を一時停止します。
  2. オブジェクトは実行スコープ内にある必要があります
  3. マウスポインターをオブジェクトまたは変数の上に移動します
  4. 黄色のツールチップが表示されます
  5. マウスをツールチップ上に移動します
  6. 上下を指す2つの小さな矢印をクリックします
  7. コンテキストメニューがポップアップします
  8. [説明の印刷]を選択すると、[オブジェクトの説明]が実行されます
  9. 説明はコンソールの出力に表示されます

私見は少し隠されて面倒...

19
LightMan

あなたの混乱は、宣言されたプロパティが(必然的に同じ名前の)(インスタンス)変数ではないという事実から生じます。

表現

indexPath.row

と同等です

[indexPath row]

そして割り当て

delegate.myData = [myData objectAtIndex:indexPath.row];

と同等です

[delegate setMyData:[myData objectAtIndex:[indexPath row]]];

合成プロパティの標準的な命名を想定しています。

さらに、delegateはおそらくid<SomeProtocol>型であると宣言されます。つまり、コンパイラはその時点でdelegateの実際の型情報を提供できず、デバッガーは依存していますコンパイル時に提供される情報。 idはジェネリック型であるため、delegateのインスタンス変数に関するコンパイル時の情報はありません。

これらが、変数としてmyDataまたはrowが表示されない理由です。

-rowまたは-myDataの送信結果を検査する場合は、コマンドpまたはpoを使用できます。

p (NSInteger)[indexPath row]
po [delegate myData]

または、式ウィンドウを使用します(たとえば、delegateが実際のタイプMyClass *であることがわかっている場合は、式(MyClass *)delegateを追加するか、delegateを右クリックして、 View Value as…およびdelegateの実際のタイプを入力します(例:MyClass *)。

そうは言っても、デバッガはもっと役立つ可能性があることに同意します。

  • デバッガーウィンドウに、コンパイル時情報の代わりにランタイム型情報を使用するように指示するオプションがあります。確かにデバッガーの速度は低下しますが、有用な情報が提供されます。

  • 宣言されたプロパティは、プロパティと呼ばれるグループに表示され、デバッガウィンドウで(オプションの)検査を直接許可できます。また、情報を取得するためにメッセージを送信/メソッドを実行する必要があるため、デバッガーの速度が低下しますが、有用な情報も提供されます。

9
user557219

実行時にコンソールウィンドウに値を印刷できます。手順は次のとおりです。

  1. 値を取得するブレークポイントを配置します
  2. 次に、段階的なデバッグを実行します。
  3. 実行時に値を確認する変数/デリゲートにカーソルを置きます。
  4. これで変数/デリゲートの説明が表示されます
  5. 「i」をクリックすると、詳細な説明が表示されます
  6. これにより、コンソールウィンドウにも詳細が出力されます。

Screenshot for printing details on console window

6

実行->表示->式を試してください

配列の名前または探しているものを入力します。

1
tbone

これは少し複雑になります。これらのオブジェクトはカスタムクラスまたは構造体であり、Xcodeでは他の開発環境ほど簡単ではありません。

もし私があなただったら、私はあなたが見たい値をNSLogにいくらかの説明を付けて送ります。

すなわち:

NSLog(@"Description of object & time: %i", indexPath.row);
1
Aurum Aquila