XcodeデバッガーでNSDictionary変数の内容を表示するにはどうすればよいですか?


85

Xcodeデバッガーを介してNSDictionary変数のキーと値のペアを表示する方法はありますか?変数ウィンドウで完全に展開されたときの情報の範囲は次のとおりです。

Variable  Value      Summary
jsonDict  0x45c540   4 key/value pairs
 NSObject {...}
  isa     0xa06e0720

辞書の各要素(配列変数と同様)が表示されることを期待していました。

回答:


140

gdbウィンドウでpo、オブジェクトの検査に使用できます。

与えられた:

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];

オブジェクトが追加された後にブレークポイントを設定すると、辞書の内容を調べることができます

(gdb) po dict
{
  bar = foo;
  buz = fiz;
}

もちろん、これらはNSStringうまく印刷されるオブジェクトです。他の複雑なオブジェクトとのYMMV。


7
こんにちは!gdbとは何ですか?poとは何ですか?わからない...助けてくれてありがとう!:)
マーティン

1
さて、GDBはGNUデバッガーの略で、実際にはXcodeのデバッガーウィンドウであることがわかりました。今、私はpoとは何かを見つける必要があります
Martin

18
OK!したがって、gdbは実際には、コマンドを入力できるコンソールのプロンプトです。「poobject_name」と入力すると、オブジェクトのコンテンツがコンソールに出力されます。
マーティン

7
poはprint-objectのエイリアスです
Brad Cupit 2010年

素晴らしい!PHPの「echovar_dump()」または「print_r()」と同等です。
mpemburn 2012年

30

任意のオブジェクト(ObjCまたはCore Foundation)変数を右クリックして、[説明をコンソールに出力]を選択できます([実行]-> [変数ビュー]でも)。これにより、-debugDescriptionデフォルトでを呼び出すobejctのメソッドの結果が出力されます-description。残念ながら、NSDictionaryこれをオーバーライドして、通常は気にしない大量の内部データを生成するため、この特定のケースでは、craigbのソリューションの方が優れています。

表示されるキーと値もを使用する-descriptionため、コレクションやその他の場所にあるオブジェクトに関する有用な情報が必要な場合-descriptionは、オーバーライドする必要があります。私は通常、デフォルトのNSObject実装の形式に一致するように、これらの行に沿って実装します。

-(NSString *)説明
{{
    return [NSString stringWithFormat:@ "<%@%p> {foo:%@}"、[self class]、self、[self foo]];
}

6

CFShow()を使用できます

NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"foo" forKey:@"bar"];
[dict setObject:@"fiz" forKey:@"buz"];
CFShow(dict);

出力には、次のように表示されます。

{
  bar = foo;
  buz = fiz;
}

3

XCode 4.6には、次の機能が追加されています。

The elements of NSArray and NSDictionary objects can now be inspected in the Xcode debugger

これで、コンソールでオブジェクト全体を印刷しなくても、これらのオブジェクトタイプを検査できます。楽しい!

ソース:http//developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/WhatsNewXcode/Articles/xcode_4_6.html


これは私にとってバグが多いです-私のNSDictionaryの一部のみを示しています
Paul Slocum

1

あなたの口述をクリックしてから、小さな「i」アイコンをクリックしてください、それは仕事をするはずです:-) Xcode5、dictの値を表示


1

これらを最新のXCodeのブレークポイントアクションで出力する場合(はい、元の投稿から10年後です!)、「ログメッセージ」アクションで次のブレークポイント式を使用します。

@ myDictionary.description @

以下は、変数イベントがNSStringであり、変数contextDataが次の内容をログに記録しているNSDictionaryであるブレークポイントアクションのスクリーンショットです


0

NSLogを使用することもできます

また、デバッグ領域またはxcodeに移動し、All Variables, Registers, Globals and Statics変数を見つけて選択することもできます。それを右クリックします。次に、Print description of "...."

それが役に立てば幸い!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.