如何访问结构中的字段

时间:2018-07-09 09:36:41

标签: lldb

我的Xcode项目中有以下代码:

- (BOOL)getIP;
{
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://httpbin.org/ip"]];
    request.HTTPMethod = @"GET";
    [request setValue:@"TestValue" forHTTPHeaderField:@"Test"];

    NSHTTPURLResponse *response = nil;
    NSError *error = nil;
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

    NSLog(@"getIP returns = %@", dict);

    return NO;
}

当我使用“ breakpoint set -b CFURLRequestSetHTTPHeaderFieldValue”命令在lldb中设置断点并触发getIP方法时,代码按预期停止。然后输入“ po $ x0” “ lldb命令,它会显示“ <CFMutableURLRequest 0x1741bff00 [0x1a7808bb8]> {url = http://httpbin.org/ip,cs = 0x0}”。

我想知道的是:1.如何访问结构CFMutableURLRequest中的url; 2.如何获取结构CFMutableURLRequest的定义。

谢谢!

1 个答案:

答案 0 :(得分:0)

po命令向您显示发送到对象的description消息的结果。不能保证description打印的文本会告诉您对象中的特定ivars,这只是一些自由格式的文本,类作者可以用她认为最能描述对象的任何内容来填充。它说“ url =”的事实并不意味着实际上存在一个名为url的ivar。

您可以使用pexpr命令来打印对象的内容(至少在调试器可用的范围内)。由于这是一个指针,因此您需要要做:

(lldb) p *request

在这种情况下,看起来这些对象是不透明的-调试信息没有说明它们的布局方式。因此,调试器无法真正帮助您直接查看对象。