27

Xcodeを実行していますが、NSData*をダンプしたいと思います。問題の変数はバッファです。UIまたはGDBデバッガーを介してこれを行う方法はありますか?

これは私が実行時に見るものです

編集

メモを回答に移動しました。

4

12 に答える 12

38

誰もその質問に正しく答えたことはありません。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で

于 2014-12-03T22:52:12.607 に答える
24

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]
于 2014-02-17T05:45:22.263 に答える
16

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."
于 2013-10-28T03:34:29.323 に答える
8

Swiftでは、これでうまくいくはずです。

po String(data:buffer!, encoding: NSUTF8StringEncoding)
于 2016-03-31T07:55:37.457 に答える
6

右クリックbufferしてをクリックしますPrint description of "buffer"

コンソールは言うべきです

Printing description of buffer:
<your data here ...>
于 2012-07-17T22:06:05.397 に答える
4

残念ながら、これまでのところ、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

于 2012-08-13T14:45:26.633 に答える
1

データインスタンスはです。

それ以外の場合は、アドレスが表示されるだけではありません。-[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方法を使用します。

于 2012-07-17T22:27:38.080 に答える
1

私は今それを持っていると思います。

そこに表示されているリストでNSDataを右クリックし、[Show MemoryOf"x"]をクリックします。

于 2012-07-17T22:36:05.850 に答える
1

私はこの関連する質問への回答としてこれを投稿しました:

ブレークポイントを設定して実行し、プログラムがブレークポイントで停止したら、次のように表示する変数/値にカーソルを合わせます。

ここに画像の説明を入力してください

NSLog(@"%@", yourLabel.text);を配置して、そのラベル/その他のオブジェクトタイプのコンテンツを表示することもできます。

もう1つのオプションは、次のようにコンソールでGDBを実行することです。

gdb
attach <your process name>

次に、po(print-object)コマンドを使用して、次のような変数の値を表示します。

po variableName

プリミティブ型(、、、、、など)の値を表示するには、次のintようにコンソールでGDBを実行しているときにコマンドを使用できます。floatlongdoublecharprint

print yourPrimitiveVariable

お役に立てれば!

編集:

このコマンドを使用すると、プロパティ名( )またはivar名(場合によっては)poの両方を使用してオブジェクトの値を出力できます。私はここでこれを示します:self.myProperty_myProperty

ここに画像の説明を入力してください

于 2012-07-17T22:40:01.727 に答える
1

Xcode 11.4(およびおそらくそれ以前)は、ビジュアルデバッガーでの(NS)データの生のバイトの検査をサポートしています。データが割り当てられた後にブレークポイントを設定し、ポップアップが表示されるまでシンボルにカーソルを合わせ、目または情報アイコンをクリックします。小さなターゲットの外に移動してポップアップが閉じないように、器用さを求めてロールします。

Swiftでテストされていますが、おそらくCファミリ言語でも動作します。

(注:目のアイコンは、適切にフォーマットされた以下の出力を生成しますが、ええと...バイトの最後の列が欠落しているようです?)

Xcodeデータビュー

于 2020-05-17T20:17:51.833 に答える
0

NSString私にとって最も簡単な方法(ローカル開発中のみ!)は、未使用のインスタンスに変換することです。次に、値がデバッガーに表示されます。終了したら、それらのコード行を削除します。

この古いスレッドから

NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];

ここに画像の説明を入力してください

于 2014-08-02T16:45:29.040 に答える
0

コードの場合Swift、私は次のことを行っています。

プログラムがブレークポイントで停止している場合は、[式の追加]オプションを使用して、インスタンスの[UInt8](data)場所を入力します。dataData

ここに画像の説明を入力してください

その後、私はdata内容を見ることができます:

ここに画像の説明を入力してください

于 2018-12-23T09:33:21.697 に答える