Viewing NSData contents in Xcode

No one has ever correctly answered the question. After 2 years I think it's time for one :)

Assuming you have in your code

NSData* myData;

Then in lldb you type

me read `[myData bytes]` -c`[myData length]`

If the format of the dump is not to your liking you can add '-t ' for example

me read `[myData bytes]` -c`[myData length]` -t int

For more help type

help me read

in lldb


In lldb, the following works to let you examine the contents of NSData objects:

You can get the address of the bytes for use with various debugger commands like this:

p (void *)[buffer bytes]

You see something like this:

(void *) $32 = 0x0b5e11f0

If you know the underlying data is a string, you can do this:

p (char *)[buffer bytes]

and the debugger will output:

(char *) $33 = 0x0b5e11f0 "This is the string in your NSData, for example."

In Swift this should do the trick:

po String(data:buffer!, encoding: NSUTF8StringEncoding)

From Xcode 5 (lldb), you can use the following:

po (NSString *)[[NSString alloc] initWithData:buffer encoding:4]

Note that this assumes your NSData instance is encoded with NSUTF8StringEncoding, but you can look up the other values in the headers or the documentation.

So if you're debugging something like a JSON request that's wrapped up in an NSURLSessionDataTask, the request data is in task.originalRequest.httpBody, and you can view that in the debugger with

po (NSString *)[[NSString alloc] initWithData:task.originalRequest.HTTPBody encoding:4]