调试器输出中的未知__lldb_autogen_pair类型

时间:2014-10-07 00:10:25

标签: objective-c afnetworking lldb

我从服务器加载JSON,发现非常奇怪的类型名称,并且不知道该怎么做 使用此enter image description here

当{J}为:

时,struct _lldb_autogen_pair的意思是什么,为什么会出现这种情况

原件:

{
"2011.10.06": [
  {
    "place":"home",
    "role":0,
    "title":"abc"
  }
],
}

更新 我有一个AFHTTPRequestOperationManager的单例子类,所以我做了

client = [[VZWebClient alloc] initWithBaseURL:[NSURL URLWithString:kVZWebClientHostName]];
client.responseSerializer = [AFJSONResponseSerializer serializer];
在NSLOG中,没有任何惊喜

2 个答案:

答案 0 :(得分:5)

您正在查看NSDictionary的内容。容器在逻辑上由键==>组成。价值对。

但是,如果你去查看字典的内存中表示,它只是存储一系列对象指针,例如

之类的东西
0x123 (key)
0x456 (value)
0x356 (key)
0x577 (value)
...

如果您是LLDB,则需要找到一种方法,将每个密钥与其值组合在一起。在C ++中,这是一个简单的问题,因为你有std :: pair<>您可以使用(并且C ++ std :: map<>倾向于在内部使用该类型来存储条目,因此您可以免费获得分组)。在ObjC中,您需要能够让分组发生的事情。

所以我们所做的就是生成一个假的__lldb_autogen_nspair,基本上归结为

struct __lldb_autogen_nspair { id key; id value; };

我们将NSDictionary作为这些结构的容器。

这个名字几乎就是说"嘿,这是一个LLDB实施细节,不用担心它"。

答案 1 :(得分:2)

__lldb_autogen_pair是一种私有数据类型,用作LLDB debuggerNSDictionary键/值对的中间表示。这实际上不是该值的一部分,而是调试器生成的某些内容,允许您在该接口中检查它。

双下划线(__)前缀通常表示私有类型,是您不应该担心的事情。