Lldb调试时怎么打印出一个结构体的内容

lldb调试时得到一个结构体的地址如图所示

请问该如何打印出这个结构体的具体内容呢

这不是结构体(struct)啊,应该是NSData,转成NSString。

额、这是个类,但是没法向gdb那样直接打印他的内容,可以通过各个类成员的get函数获取他们的值

p *(Type *)addr

po [addr _ivarDescription]

1 个赞

po [[NSString alloc] initWithData:$x0 encoding:1]

ivars $x0

你说的结构体,此处是ManualAuthAesReqData,准确说是,iOS中ObjC的Class类的Instance实例。

想要查看Class(的Instance)的结构 = 有哪些属性 有哪些函数等等,可以用:

  • po [$x0 _shortMethodDescription]
    • 可以输出:属性值+函数

或者用:

  • po [$x0 _ivarDescription]
    • 只输出method函数,不输出属性

举例:

  • _shortMethodDescription
(lldb) po [observerImp _shortMethodDescription]
<MLHAMDataLoadTaskObserverImpl: 0x2805ec190>:
in MLHAMDataLoadTaskObserverImpl:
     Properties:
         @property (readonly) unsigned long hash;
         @property (readonly) Class superclass;
         @property (readonly, copy) NSString* description;
         @property (readonly, copy) NSString* debugDescription;
     Instance Methods:
         - (void) dataLoadTask:(id)arg1 didCompleteWithError:(id)arg2; (0x103a29678)
         - (void) dataLoadTaskDidStart:(id)arg1; (0x103a29994)
         - (id) init; (0x103a29c74)
         - (void) .cxx_destruct; (0x1054dea04)
(NSObject ...)
  • _ivarDescription
(lldb) po [observerImp _ivarDescription]
<MLHAMDataLoadTaskObserverImpl: 0x2805ec190>:
in MLHAMDataLoadTaskObserverImpl:
     _networkRequestTracker (<YTNetworkRequestTracker>*): <YTNetworkRequestTrackerImpl: 0x2807527a0>
in NSObject:
     isa (Class): MLHAMDataLoadTaskObserverImpl (isa, 0x21a10a6d7b5d)