Xcodeを実行していますが、NSData*をダンプしたいと思います。問題の変数はバッファです。UIまたはGDBデバッガーを介してこれを行う方法はありますか?
編集
メモを回答に移動しました。
Xcodeを実行していますが、NSData*をダンプしたいと思います。問題の変数はバッファです。UIまたはGDBデバッガーを介してこれを行う方法はありますか?
編集
メモを回答に移動しました。
誰もその質問に正しく答えたことはありません。2年後、私はそれが1つの時間だと思います:)
あなたがあなたのコードにあると仮定して
NSData* myData;
次に、lldbに次のように入力します
me read `[myData bytes]` -c`[myData length]`
ダンプの形式が好みに合わない場合は、たとえば「-t」を追加できます。
me read `[myData bytes]` -c`[myData length]` -t int
ヘルプタイプの詳細については
help me read
lldbで
Xcode 5(lldb)から、以下を使用できます。
po (NSString *)[[NSString alloc] initWithData:buffer encoding:4]
これは、NSDataインスタンスがでエンコードされていることを前提としてNSUTF8StringEncoding
いますが、ヘッダーまたはドキュメントで他の値を検索できることに注意してください。
したがって、でラップされたJSONリクエストのようなものをデバッグしている場合NSURLSessionDataTask
、リクエストデータはにtask.originalRequest.httpBody
あり、デバッガーでそれを表示できます。
po (NSString *)[[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:4]
lldbでは、NSDataオブジェクトの内容を調べるために次のように機能します。
次のようなさまざまなデバッガコマンドで使用するバイトのアドレスを取得できます。
p (void *)[buffer bytes]
次のようなものが表示されます。
(void *) $32 = 0x0b5e11f0
基になるデータが文字列であることがわかっている場合は、次のように実行できます。
p (char *)[buffer bytes]
デバッガーは次のように出力します。
(char *) $33 = 0x0b5e11f0 "This is the string in your NSData, for example."
Swiftでは、これでうまくいくはずです。
po String(data:buffer!, encoding: NSUTF8StringEncoding)
右クリックbuffer
してをクリックしますPrint description of "buffer"
。
コンソールは言うべきです
Printing description of buffer:
<your data here ...>
残念ながら、これまでのところ、NSData内のデータを実際にすばやく表示できるという問題を解決する提案はありませんでした。
必要な方法で機能する簡単なメソッドを作成しました。GDBウィンドウから入力するprint [Util dumpData:theData]
と、フォーマットされた出力が得られます。
+(void) dumpData:(NSData *)data
{
unsigned char* bytes = (unsigned char*) [data bytes];
for(int i=0;i< [data length];i++)
{
NSString* op = [NSString stringWithFormat:@"%d:%X",i,bytes[i],nil];
NSLog(@"%@", op);
}
}
NsLog出力
0:24
1:0
2:4
3:0
4:0
5:0
データインスタンスは空です。
それ以外の場合は、アドレスが表示されるだけではありません。-[NSData description]
データの内容のプリントアウトが含まれています。バイトは4つにグループ化され、先頭に0のプレースホルダーが付いた16進数で出力されます。
char arr[] = {0x1, 0x2, 0xA, 0x4, 0xF};
NSData * dat = [NSData dataWithBytes:arr length:5];
NSLog(@"%@", dat);
2012-07-17 22:24:48.973 PrintDat [61264:403] <01020a04 0f>
デバッガーのコマンドラインで使用po dat
すると、アドレスを含めて同じ結果が得られます。
(NSData *)$ 1 = 0x00007f98da500180 <01020a04 0f>
Anshuが提案したコンテキストメニュールートもこのdescription
方法を使用します。
私は今それを持っていると思います。
そこに表示されているリストでNSDataを右クリックし、[Show MemoryOf"x"]をクリックします。
私はこの関連する質問への回答としてこれを投稿しました:
ブレークポイントを設定して実行し、プログラムがブレークポイントで停止したら、次のように表示する変数/値にカーソルを合わせます。
NSLog(@"%@", yourLabel.text);
を配置して、そのラベル/その他のオブジェクトタイプのコンテンツを表示することもできます。
もう1つのオプションは、次のようにコンソールでGDBを実行することです。
gdb
attach <your process name>
次に、po
(print-object)コマンドを使用して、次のような変数の値を表示します。
po variableName
プリミティブ型(、、、、、など)の値を表示するには、次のint
ようにコンソールでGDBを実行しているときにコマンドを使用できます。float
long
double
char
print
print yourPrimitiveVariable
お役に立てれば!
編集:
このコマンドを使用すると、プロパティ名( )またはivar名(場合によっては)po
の両方を使用してオブジェクトの値を出力できます。私はここでこれを示します:self.myProperty
_myProperty
Xcode 11.4(およびおそらくそれ以前)は、ビジュアルデバッガーでの(NS)データの生のバイトの検査をサポートしています。データが割り当てられた後にブレークポイントを設定し、ポップアップが表示されるまでシンボルにカーソルを合わせ、目または情報アイコンをクリックします。小さなターゲットの外に移動してポップアップが閉じないように、器用さを求めてロールします。
Swiftでテストされていますが、おそらくCファミリ言語でも動作します。
(注:目のアイコンは、適切にフォーマットされた以下の出力を生成しますが、ええと...バイトの最後の列が欠落しているようです?)
NSString
私にとって最も簡単な方法(ローカル開発中のみ!)は、未使用のインスタンスに変換することです。次に、値がデバッガーに表示されます。終了したら、それらのコード行を削除します。
この古いスレッドから
NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];