首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在NSObject类方法分配中设置断点,我想看看调用树

在NSObject类方法分配中设置断点,可以通过以下步骤来实现:

  1. 打开Xcode,并打开你的项目。
  2. 在Xcode的导航栏中选择"Product",然后选择"Scheme",再选择"Edit Scheme"。
  3. 在弹出的窗口中,选择"Run"选项卡。
  4. 在左侧的列表中选择"Debug"。
  5. 在右侧的"Executable"下拉菜单中选择你的应用程序。
  6. 在下方的"Arguments"选项卡中,点击"+"按钮添加一个新的"Environment Variable"。
  7. 在"Name"字段中输入"NSObjCMessageLoggingEnabled",在"Value"字段中输入"YES"。
  8. 确保"Debug executable"复选框被选中。
  9. 点击"Close"关闭窗口。

现在,你已经成功设置了NSObject类方法分配的断点。当你运行应用程序时,Xcode将会在控制台输出调用树的信息,包括调用的方法和类。

请注意,这种方法只适用于调试目的,不建议在生产环境中使用。此外,断点的设置可能会对应用程序的性能产生一定的影响,因此在完成调试后,记得将断点移除或禁用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Channel的原理探究

一、Channel的创建 首先,我创建了一个FlutterMethodChannel实例对象: 然后我想看一下methodChannelWithName方法的实现,点进去之后: 可以看到,只定位到了方法的声明中...实际上,在外界每一个channel都会有一个作为唯一标识的channelName,因此在设置回调的时候就要将这个回调与channel的唯一标识进行一一对应。...),和一个解码方法(用于将二进制数据解码成OC类型数据) 实现FlutterStandardMethodCodec协议的类有如下几个: (1)FlutterBinaryCodec,用于二进制数据和二进制数据之间的编解码...,还有如下方法: (1)encodeMethodCall,用于将OC的方法调用数据编码成二进制。...是对方法调用的编解码解析,适用于MethodChannel和EventChannel。

1K30

iOS底层原理总结 - 探寻OC对象的本质

但是我们发现NSObject对象中还有很多方法,那这些方法不占用内存空间吗?其实类的方法等也占用内存空间,但是这些方法所占用的存储空间并不在NSObject对象中。...// 而调用类对象的class方法时得到还是类对象,无论调用多少次都是类对象 Class cls = [[NSObject class] class]; Class objectClass3 = [NSObject...对象的isa指针指向哪里 当对象调用实例方法的时候,我们上面讲到,实例方法信息是存储在class类对象中的,那么要想找到实例方法,就必须找到class类对象,那么此时isa的作用就来了。...当类对象调用类方法的时候,同上,类方法是存储在meta-class元类对象中的。...当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用 ?

1.2K50
  • iOS开发入门笔记

    iOS开发入门笔记 本文面向已有其它语言(如Java,C,PHP,Javascript)编程经验的iOS开发初学者,初衷在于让我的同事一小时内了解如何开始开发iOS App,学习目标包括: 能使用Xcode...官方并没有提到Objective-C怎么实现私有方法,我查阅了stackoverflow,统一的答案是,要实现私有方法的效果只能借助Category,不过,根据我的测试,即使采用了Category,也不能阻止外部的代码调用这个...变量和属性 类方法和实例方法 类方法 类方法就是Java、PHP里的Static Method,不用实例化就能调。类方法有一个加号前缀。...在模拟器上操作时,如果执行过程中遇到了你在Xcode里设置的断点,模拟器会暂停运行,并将当前活动窗口切换回Xcode,供你调试。 在Xcode里增加或者取消了断点,不需要重新编译和安装应用即可生效。...在iOS真机上操作被测试的程序能激活Xcode中设置的断点。 越狱iOS设备。

    4K60

    求职笔记-iOS篇

    6、常见的持久化实现方法? 7、动画中的图层树、逻辑树、动画树、显示树分别是什么? 8、APP的生命周期(应用程序的状态)有哪些? 9、多线程中同步方式有哪些?...*Class; 每一个OC对象本质上都是一个结构体,包括成员变量列表和成员方法列表,对象通过isa指针指向类; 类本质上也是一个对象,是元类(meteClass)的实例,元类包括类方法的列表,类通过类的...isa指针指向元类; 所有的元类继承根元类,根元类isa指针指向本身; objc_msgSend方法:objc_msgSend含两个必要参数:receiver、方法名(selector) [receiver...isa指针找到对象的原来类,然后在类的方法列表中查找selector; 如果查找不到,通过Class super_class指针找到父类,并在父类的方法列表查找,直到NSObject类; 查找到selector...,objc_msgSend方法根据方法列表的内存地址调用该实现; 每个类都有一个独立的缓存struct objc_cache *cache,缓存方法调用的结果。

    1.2K60

    KVO详解及底层实现

    同样在添加监听方法之前,利用runtime打印下方法的实现,截图如下: 发现方法实现变了,内部调用了系统Foundation框架下的_NSSetObjectValueAndNotify方法。...那么这个框架内部又是怎么实现的呢,我们可以下断点,查看下函数调用栈: 首先通过设置一个观察点,观察属性的变化: 继续执行,可以看到函数调用栈如下: 在结果发生改变的地方继续下断点调试: 由以上函数调用栈...自己动手写一个KVO KVO底层实现还是很复杂的,下面我只是简单的写下实现过程: 因为它是一个非正式协议,给NSObject新建一个Category,NSObject+kvo.h,添加监听方法: .h文件...class]; // 将self的isa指针指向父类ZJPerson,调用父类setter方法 object_setClass(self, class_getSuperclass...([self class])); // 调用父类setter方法,重新复制 objc_msgSend(self, @selector(setName:), name);

    2.4K20

    「类与对象」如何准确获取对象的内存大小?

    回顾一下对象的本质 在上篇文章「类与对象」揭秘本质的第一步中,揭秘NSObject类的底层数据结构,如下所示: struct NSObject_IMPL { Class isa; }; 在Xcode...说白了,class_getInstanceSize方法就是获取实例对象中成员变量内存大小。...仔细想一下,实例对象在创建的时候,系统应该就会分配对应的内存空间,那咱继续探究一下,在对象初始化的过程中,是否有对应的内存分配呢?...alloc 继续从Objc的源码看一下alloc函数实现,在NSObject.mm类中找到alloc以及allocFromZone方法的实现: + (id)alloc { return _objc_rootAlloc...关于更多内存分配的知识,将在下篇文章【聊一聊内存布局】中揭秘。

    4.6K10

    iOS description与debugDescription在调试程序中的应用

    是NSObject协议中的声明的两个方法,同时NSObject类也实现了这个方法,如果子类没有重写,则会调用父类的description和debugDescription方法。...首先,这两个方法适用于程序代码的调试的,当我们调用打印Log时,会向对象发送一个这样的消息。...二、NSObject基类中的description方法是如何实现的 我们写如下的测试代码:  NSObject * objc = [[NSObject alloc]init];  NSLog(@"objc...Test类对象的属性打印了出来,这时我们在调用NSLog函数时,打印结果如下: ?...description是我们在程序中打Log会调用的方法,debugDescription则是我们在断点调试时,在控制台使用po命令打印会调用的方法,比如我们重写Test类的这个方法: -(NSString

    1.4K10

    iOS微信内存监控

    对于堆内存对象,它的Category名是“Malloc ”+分配大小,如“Malloc 48.00KiB”;对于虚拟内存对象,调用vm_allocate创建时,最后的参数flags代表它是哪类虚拟内存,...,我们可以通过hook OC方法+[NSObject alloc]来获取: 但后来发现,NSData创建对象的类静态方法没有调用+[NSObject alloc],里面实现是调用C方法NSAllocateObject...另外在存储过程中,也尽量减少内存申请/释放。所以放弃了sqlite,改用了更轻量级的平衡二叉树来存储。...相比其他平衡二叉树(如红黑树),其内存占用较小,不需要存储额外信息。...对于某些Category,如分配大小TOP N,或者UI相关的(如UIViewController、UIView之类的),它里面分配大小TOP M的堆栈才做上报。

    1.5K30

    iOS系统架构及常用框架

    当引入此头文件后,便可以在程序里使用任何在UIKit里声明的类 CoreGraphics 它是iOS的核心图形库,平时使用最频繁的point,size,rect等这些图形,都定义在这个框架中,类名以CG...图文混排:简单来说,就是在富文本中插入一个空白的占位符,通过相关代理计算图片的尺寸信息,更具富文本计算出来的frame设置对应图片位置,绘制图片。...在Objective-C中,类也是用对象来表示的,而类的isa指针指向它的metaclass(存储静态成员变量和类方法)。 super_class指针:指向父类。 name:类名称。...methodLists:根据标志位的不同可能指向不同,比如可能指向实例方法列表,或者指向类方法列表。...NSObject定义的方法主要是生成、释放对象以及对象的基础操作和内存管理。

    7.8K21

    iOS学习——iOS 整体框架及类继承框架图

    每一个子框架都是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源,共享资源库定义应用程序可以调用的函数和方法。...框架的入口: #import   ,当引入此头文件后,便可以在程序里使用任何在UIKit里声明的类。(PS: 当然还要把这个框架链接到你的应用程序中)。...动态能力有三种: 动态类——运行时确定类的对象 动态绑定——运行时确定要调用的方法 动态加载——运行时为程序加载新的模块 3.3 动态能力相关的isa指针   每个Objective-C对象都有一个隐藏的数据结构...(为了区分两个对象,我把前面提到的对象叫Objective-C对象),包括Objective-C对象的方法调度表,实现了什么协议等 等。...根类的主要方法:分配、初始化、复制 分配:alloc和allocWithZone:方法用于从某内存区域中分配一个对象内存,并使对象指向其运行时的类定义。 初始化:init方法是对象初始化。

    3.6K70

    [Android Studio 权威教程]断点调试和高级调试

    2. step into:看到方法往里走 比如我们的for循环当中调用了一个stepNext(int i)方法,当我们走到这里想看看这个方法里面的运行过程的时候我们可以这样,当走到这个方法的时候我们可以按下...4. step out :有断点下一个,走完断点继续走 这里如果我们的一个流程当中,包括调用的方法,如果有断点走到下一个断点,如果没有断点,而是在一个调用的方法当中,会跳出这个方法,继续走。 ?...(上图)我现在程序位置在第一个断点位置(24行),我调用的stepNext方法中也有一个断点,此时我按下step out按钮会走到stepNext中的断点处(39行)我此时如果再按一下step out...(上图)如果我现在程序位置在stepNext的方法中,如果我此时按下step out,会走到stepNext方法的调用出的下一个可执行代码(30行) 5. run to Cursor :下个断点我们见...这里的意思就是说,会很快执行到下一个断点的位置,而且可以静如任何调用的方法 ?

    1.2K90

    iOS微信内存监控

    对于堆内存对象,它的Category名是“Malloc ”+分配大小,如“Malloc 48.00KiB”;对于虚拟内存对象,调用vm_allocate创建时,最后的参数flags代表它是哪类虚拟内存,...,我们可以通过hook OC方法+NSObject alloc来获取: [3.png] 但后来发现,NSData创建对象的类静态方法没有调用+NSObject alloc,里面实现是调用C方法NSAllocateObject...另外在存储过程中,也尽量减少内存申请/释放。所以放弃了sqlite,改用了更轻量级的平衡二叉树来存储。...相比其他平衡二叉树(如红黑树),其内存占用较小,不需要存储额外信息。...对于某些Category,如分配大小TOP N,或者UI相关的(如UIViewController、UIView之类的),它里面分配大小TOP M的堆栈才做上报。

    3.5K50

    iOS-底层原理36:内存优化(一) 野指针探测

    SIGSYS 系统调用异常。 SIGKILL 此信号表示系统中止进程。崩溃报告会包含代表中止原因的编码。exit(), kill(9) 等函数调用。iOS 系统杀进程,如 watchDog 杀进程。...给僵尸对象发送消息的话,它仍然是可以响应的,然后会发生崩溃,并输出错误日志来显示野指针对象调用的类名和方法 苹果的僵尸对象检测原理 首先我们来看下Xcode中僵尸对象是如何实现的,具体操作步骤可以参考这篇文章...1、开启野指针检测 2、设置监控到野指针时的回调block,在block中打印信息,或者存储堆栈 3、检测到野指针是否crash 4、最大内存占用空间 5、是否记录dealloc调用栈 6、监控策略...+dealloc调用栈,保存在僵尸对象中 7、根据情况是否清理内存和对象 通过僵尸对象检测的实现思路 1、通过OC中Mehod Swizzling,交换根类NSObject和NSProxy的dealloc...方法为自定义的dealloc方法 2、为了避免内存空间释放后被重写造成野指针的问题,通过字典存储被释放的对象,同时设置在30s后调用dealloc方法将字典中存储的对象释放,避免内存增大 3、为了获取更多的崩溃信息

    2.3K31

    《Objective-C-高级编程》干货三部曲(一):引用计数篇

    我的个人理解是:通过autorelease方法,使对象的持有权转移给了自动释放池。所以实现了:调用方拿到了对象,但这个对象还不被调用方所持有。...将指向某对象的指针变量设置为nil。 当程序释放对象的某个拥有者时。 从collection类中删除对象时。...下面看一下苹果的实现: 苹果的实现 alloc方法 通过在NSObject类的alloc类方法上设置断点,我们可以看到执行所调用的函数: +alloc +allocWithZone: class_createInstance...调用已分配对象的autorelease方法。 废弃NSAutoreleasePool对象。 ?...addObject:self]; } 如果调用NSObject类的autorelease方法,则该对象就会被追加到正在使用的NSAutoreleasePool对象中的数组里(作者假想了一个简化的源代码

    1.8K40

    深入浅出iOS内存管理-技术创作101训练营

    栈:函数调用开销,比如局部变量。分配的内存空间地址越来越小,由编译器来进行管理。 堆:通过alloc、malloc、calloc等动态分配的空间,分配的内存空间地址越来越大,由开发者进行管理。...首先我们要理清楚的就是三个概念对象本质、isa指针、struct结构体 苹果官方文档-对象分配 在调用alloc或者allocWithZone:方法后,将会得到该类的未初始化的实例变量,alloc方法将会在应用中开辟一段空间...在将分配集设置isa到对象的类之后,该对象将集成到继承层次结构的运行时视图和构成程序的当前对象网络(类和实例)中。...初始化对象的 isa实例变量指向对象的类,它是一个从类定义编译的运行时对象。 初始化所有其他 实例变量为零(或等效类型为零,如nil,NULL和0.0)。...使用Xcode点到NSObject类当中,我们会发现NSObject类里包含着一个isa指针,isa指针指向类对象Class。

    1.3K54

    OC对象原理(二)

    %@ -- %p",p,pClass); } return 0; } 接下来我们摁住conmand,单击alloc: 现在跳到了NSObject的类方法alloc中:【①】 + (id...我们在下面位置打个断点: 然后查看汇编源码: 如下: 我们发现,当我们调用alloc方法的时候,会调起一个名为objc_alloc的符号,而其他的一些方法基本都是走得正常的objc_msgSend...接下来我们来比较一下结构体struct和联合体union: 结构体中的所有变量是“共存”的——其优点是“有容乃大”、全面;其缺点是内存空间的分配是粗放的,不管用不用,全分配。...,它是NSObject类的isa指针指向的元类,也就是根元类。...而上面第四步中也是0x00000001074b11d8,所以说,上面第四步中的NSObject是根元类。 Clang编译 我们在研究的过程中,经常会需要将OC代码编译成C++,如何编译呢?

    73710

    方法的查找流程——快速查找

    消息的接收者是objc_super类型,其内部携带了当前方法的调用者——实例对象自身,以及实例对象的父类。...消息的接收者是objc_super类型,其内部携带了当前方法的调用者——类对象自身,以及类对象的父类(元类)。...实际上objc_msgSendSuper最终也会通过调用objc_msgSend进行消息发送,具体可查阅我的这篇总结:[super class]和[self class] 快速查找流程 接下来我们开始正式分析快速查找流程...,找到bits,然后找到bits的rw,然后找到rw中的ro,然后找到ro中的methodlist,进而找到对应的方法实现。...元类的所有父类都是元类,只有根元类的父类是NSObject根类,而这里的入参[Norman class]是类对象,它并不能与Norman元类的所有父类中的唯一的类对象NSObject根类对象匹配成功,因此这里返回

    63620
    领券