Xcode Debugger:変数の値を表示


107

UITableViewControllerの私のコード:

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

デバッガーの値delegate.myDataまたはindexPath.rowデバッガーの値を確認するにはどうすればよいですか?delegate.myData配列とでindexPath.rowある必要がありintます。私は、オブジェクトのメモリアドレスを見ることができますdelegateし、indexPathしかしどこですmyDatarow

代替テキスト

回答:


142

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

私も使用しています

po variableName
print variableName

コンソールで。

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

print [myData objectAtIndex:indexPath.row]  

または

po [myData objectAtIndex:indexPath.row]

ありがとうございました!私はたくさん試します: "print [myData objectAtIndex:indexPath.row]"、 "po [myData objectAtIndex:indexPath.row]"、 "print indexPath.row"、 "po indexPath.row"、...しかし、毎回私は「行という名前のメンバーはありません。」というメッセージを受け取りました。これは機能します:「print indexPath」と「po indexPath」。そこで、「。」の代わりに「[]」を使用してみました。「po [indexPath row]」->「NILオブジェクトの説明を印刷できません。」"po [indexPath getRow]"-> "ターゲットはこのメッセージセレクターに応答しません。" :-(
Manni

4
print(int)[indexPath row]を試行
Andriy

po [myData objectAtIndex:(int)[indexPath row]]
Andriy

@VanDuTran私はかなり確信と同等だpo obj迅速ではありますpo print(obj)
Chris

これは計算されたプロパティの値を見つけるのにも最適でした。ありがとう!
Paula Hasstenteufel 2017年

25

開発環境としてのXcodeに変数をデバッグする簡単な方法を含める必要があるという他のポスターにも同意します。ええと、良い知らせがあります。

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

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

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

デバッグ領域ボタン

Xcode 4.6.3のデバッグ領域

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

ブレークポイント

次に、デバッグ領域でこのボタンを探し、中央のボタンをクリックします。エリアが2つに分割されていることに気づくでしょう。

デバッグ領域の分割

このようになります

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

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

検索フィールド

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

ステップイン

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

コンテキストメニュー

ご覧のとおり、このコンテキストメニューには、非常に興味深いデバッグオプションがたくさんあります。以下のようなウォッチすでに入力したコマンド、あるいはと示唆されている値の編集...あなたの変数の実行時の値を変更します!


21

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

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

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


xcodeの "Print Description"が機能しないので、どうすれば有効にできますか?
Kirtikumar A. 2013

@kirtiavaiyaアプリケーションは一時停止している必要があり、印刷する変数は現在のスコープ内にある必要があります。また、「self.variable」を直接印刷することはできませんが、Andriyソリューションを使用して_ <変数名>を印刷できます。例:self.btnHelloの場合、コンソールに「po _btnHello」と書き込みます(これは、getterメソッドの名前を変更していない場合にのみ機能します)
LightMan

@LightManはい、その通りですが、動作しません
Kirtikumar A.13年

10

混乱は、宣言されたプロパティが(インスタンスと同じ)変数ではない(必ずしも同じ名前である)ことに起因します。

表現

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か、を右クリックしてdelegateView Value as…実際のタイプdelegate(例:)を選択して入力しますMyClass *

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

  • コンパイル時の情報の代わりに実行時の型情報を使用するようにデバッガウィンドウに指示するオプションがある場合があります。デバッガは遅くなりますが、便利な情報が得られます。

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


説明ありがとうございます!これはとても役に立ちました!:-)
Manni

7

実行時に値をコンソールウィンドウに出力できます。以下はステップです:

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

コンソールウィンドウの詳細を印刷するためのスクリーンショット


1
これはswiftで機能しますか?obj cで表示するのに使用するようなオブジェクトの値を表示するswift cantは初めてです。
umairhhhs 2015年

1
@umairhhhsこの投稿はObjective-C専用です。
Jayprakash Dubey

1
これは非常に役立ち、時間を節約する機能だったので、なぜこれがSwift Editorにないのかと思います。
umairhhhs 2015年

1

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

私があなただったら、私はあなたが見たい値をNSLogして、いくつかの説明を付けたいと思います。

つまり:

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

11
はい、NSLogは可能ですが、デバッグに代わる快適な方法ではありません。希望の値を表示する方法がないことに非常に驚いています。これは、開発環境の基本的な機能に属しています。
Manni

2
XCodeについて最も腹立たしいこと。哀れ。
ryan0 2013年

1

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

アレイの名前または探しているものを入力します。


ありがとうございました!式ウィンドウに「indexPath.row」と「delegate.myData」を入力しましたが、「Summary」列に常に「範囲外」と表示されます:-(
Manni

np、それが見つかるまで同じ問題がありました;)
tbone

1
配列などを設定した直後にブレークポイントを設定すると、式で値を見つけることができます。幸運を祈ります
tbone
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.