web-dev-qa-db-ja.com

Xcodeデバッガーでオブジェクト内の値を表示するにはどうすればよいですか?

最近のほとんどのIDEでは些細な機能なので、それはばかげた質問のように聞こえるかもしれませんが、私はiOS開発に飛び込み、プラットフォームとSDKに慣れてきており、これを理解できません。私はMSVisual Studioの経験が豊富で、Xcodeはほとんど同じように機能しますが、比較するとまだかなりの機能が不足していますが、それでも非常に優れたIDEです。デバッグに関しては、XcodeはVisual Studioと非常によく似ており、変数の上にマウスを置くと現在の値が表示されます。ただし、オブジェクト変数に関しては、ほとんどの場合、アドレスのみと展開矢印が表示されます。展開矢印は「NSObject」に展開され、「isa」に展開されます。これは、何も教えてくれないすべての属性に展開されます。私はVisualStudioのようなIDEに慣れており、イントロスペクションを実行して実際のオブジェクトとそのすべての直接のプロパティと値を表示するのに十分賢いです。 Xcodeはこれを行うのに十分スマートであり、正しく使用していないと思います。

オブジェクトインスタンス(NSDateComponentsインスタンスなど)を含むコード行にブレークポイントを設定した場合、そのプロパティの値(年、週、日、時間など)を表示するにはどうすればよいですか?

よろしくお願いします!

編集:これは私が検査するすべてのオブジェクトで得られる情報のスクリーンショットです... 代替テキストhttp://joecrotchett.com/ images/misc/example.jpg

35
BeachRunnerFred

イライラします。デバッガーはすべてのオブジェクトの構造を知っている必要がありますが、そうではないようです。しかし、以前はもっとひどいものでした。 NSArrayと同様に、それらはオブジェクトの配列です。デバッガーは具体的にどのタイプのオブジェクトを認識していません。これは、デバッガーではなく、Objective-C言語が原因です。

IOSの開発に飛び込むと、Appleは、開発に関して競合他社よりも約15年遅れていることに気付くと思います。それは冗談ではありません。しかし、彼らは追いついてきて、 、私を信じてください、それは以前はずっとひどいものでした!

34
beeeefy

私のデータオブジェクトでは、descriptionメソッドを上書きして、オブジェクトの概要を含む文字列を出力する傾向があります。このようなもの:

Printing description of myContact:
{name=Homer, lastname=Simpson, ...}

これは、デバッガーで、またはコンソールにNSLogするときに、オブジェクトをすばやく検査できることを意味します。その説明に関連するすべてのデータが含まれている場合は、isEqual:を上書きして、説明を使用して2つのオブジェクトを比較することもできます。

5
Besi

変数にカーソルを合わせると、その変数に関する行がポップアップ表示されます。マウスを少し右に動かし、ポップアップの左側にある三角形の矢印にカーソルを合わせると、その矢印が下向きになり、別のポップアップが開き、そのオブジェクトの名前付きプロパティがすべて表示されます。

「説明」の値を印刷するように取得することもできます。 2つの小さな「上/下」矢印の上にくるまで、ポインタを少し右に動かします。次に、左(まあ、「メイン」)クリックします。ポップアップが表示され、1つのオプションは「説明の印刷」です。それをクリックすると、-descriptionメソッドの出力がコンソールに表示されます。

3
Dan Ray

右クリックメニューの[サマリー形式の編集]に移動して、Xcodeがローカル変数ペインに値を表示する方法を変更することもできます。

たとえば、descriptionメソッドを呼び出すには、次のように設定します。

{(NSString*)[$VAR description]}:s

ここでいくつかの詳細: Xcodeデバッガー変数表示を理解する

3
Bryan

さて、さらに2年が経過しましたが、xcodeは、オブジェクトが何であるかを理解するのではなく、ほとんどのオブジェクトでisa =(クラス)を表示しています。

そして、2、3年経っても、Appleはまだ遅れています。なぜなら、競争は彼らの周りをループしているからです(そして、彼らは現在、競合他社の現在の状態より16年遅れています)。

1
kindaian