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

如何在Xcode-prj中获得objective-c函数调用图?

在Xcode项目中获取Objective-C函数调用图可以通过以下步骤实现:

  1. 打开Xcode项目,并确保项目成功编译通过。
  2. 在Xcode的导航器中选择你想要获取函数调用图的源文件。
  3. 在Xcode的菜单栏中选择"Product" -> "Perform Action" -> "Generate Output" -> "Generate Call Graph"。
  4. Xcode将会在项目的Derived Data目录下生成一个名为"callgraph.dot"的文件。
  5. 打开终端应用程序,并导航到生成的"callgraph.dot"文件所在的目录。
  6. 使用Graphviz工具将"callgraph.dot"文件转换为可视化的函数调用图。运行以下命令:dot -Tpdf callgraph.dot -o callgraph.pdf这将生成一个名为"callgraph.pdf"的PDF文件,其中包含了函数调用图。
  7. 打开"callgraph.pdf"文件,即可查看Objective-C函数调用图。

Objective-C函数调用图可以帮助开发人员更好地理解代码结构和函数之间的关系,从而更高效地进行代码维护和调试。

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

相关·内容

何在Go的函数得到调用函数名?

原文作者:smallnest 有时候在Go的函数调用的过程,我们需要知道函数被谁调用,比如打印日志信息等。例如下面的函数,我们希望在日志打印出调用者的名字。...0 代表当前函数,也是调用runtime.Caller的函数。1 代表上一层调用者,以此类推。...func Callers(skip int, pc []uintptr) int Callers用来返回调用站的程序计数器, 放到一个uintptr。...比如在上面的例子增加一个trace函数,被函数Bar调用。 1…… 2func Bar() { 3 fmt.Printf("我是 %s, %s 又在调用我!...如果因为内联程序计数器对应多个函数,它返回最外面的函数。 它的返回值是一个*Func类型的值,通过*Func可以获得函数地址、文件行、函数名等信息。

5.3K30
  • 何在 Go 函数获取调用者的函数名、文件名、行号...

    背景 我们在应用程序的代码添加业务日志的时候,不论是什么级别的日志,除了我们主动传给 Logger 让它记录的信息外,这行日志是由哪个函数打印的、所在的位置也是非常重要的信息,不然排查问题的时候很有可能就犹如大海捞针...、该调用在文件的行号。...如果无法获得信息,返回值 ok 会被设为 false。...获取调用者的函数名 runtime.Caller 返回值第一个返回值是一个调用栈标识,通过它我们能拿到调用栈的函数信息 *runtime.Func,再进一步获取到调用者的函数名字,这里面会用到的函数和方法如下...真正要实现日志门面之类的类库的时候,可能是会有几层封装,想在日志里记录的调用者信息应该是业务代码打日志的位置,这时要向上回溯的层数肯定就不是 1 这么简单了,具体跳过几层要看实现的日志门面具体的封装情况

    6.5K20

    用模拟执行实现Objective-C代码自动化分析

    使用场景 解码/解密/解混淆/解压缩 - 在进行恶意代码分析时,你经常会遇到用于解码、解压缩、解密或者解混淆一些有用数据(字符串或者其他的payload)的函数。...example 4显示了一些代码块,这些代码块调用一个函数,该函数需要一个时间戳值并将其转换为字符串。...4: 调用时间戳转换函数5: Simple...objc2_analyzer使用flare-emu的iterate API以及执行Objective-C反汇编分析的指令和调用挂钩,以确定为二进制形式的 objc_msgSend 变量的每次调用传递的...9:为函数实现添加到IDB的交叉引用 应当注意,从7.0开始的每个IDA Pro版本都对Objective-C代码分析和处理进行了改进。

    87630

    深入浅出 Runtime(一):初识

    网络配 目录 Runtime 简介 Objective-C 是一门动态运行时语言 什么是编译时与运行时? 编译时语言与动态运行时语言的区别?...相关链接 Runtime 简介 Runtime 是一个用C、汇编编写的运行时库,包含了很多 C 语言的 API,封装了很多动态性相关的函数Objective-C 是一门动态运行时语言,允许很多操作推迟到程序运行时再进行...编译时语言:在编译期进行函数决议; 动态运行时语言:将函数决议推迟到运行时。...Objective-C 程序在三个不同的级别上与 Runtime 系统进行交互 通过 Objective-C 源代码; 通过 Foundation 框架 NSObject 类定义的方法,: // 根据...Runtime 函数: 类相关 // 动态创建一对类和元类(参数:父类,类名,额外的内存空间) Class objc_allocateClassPair(Class superclass, const

    99020

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

    每一个子框架都是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像、声音文件等其他资源,共享资源库定义应用程序可以调用函数和方法。...下图就是iOS8.3系统的框架架构图,最新的没有找到,现在iOS11新增了一些功能模块,但是整体的框架大同小异。 ?...框架的入口: #import   ,当引入此头文件后,便可以在程序里使用任何在UIKit里声明的类。(PS: 当然还要把这个框架链接到你的应用程序)。...动态能力有三种: 动态类——运行时确定类的对象 动态绑定——运行时确定要调用的方法 动态加载——运行时为程序加载新的模块 3.3 动态能力相关的isa指针   每个Objective-C对象都有一个隐藏的数据结构...其它类继承NSObject,访问Objective-C运行时系统的基本接口,这样其他类的实例可以获得运行时的能力。 ?

    3.5K70

    iOS开发之ReactiveCocoa下的MVVM(干货分享)

    /65637501)的一张PPT来简单的说一下什么是函数响应式编程。...在OC的NSArray可以通过rac_sequence方法转换成ReactiveCocoa的Sequence,然后就可以调用处理 信号的一些方法了。...上面示例的原理如下: ? 五. 在MVVM引入RactiveCocoa 学以致用,最后来个简单的实例,来感受一下如何在MVVM中使用RactiveCocoa。...有有真相,到这儿如果还不理解我就没招了。 ? 在Public方法- (id) buttonIsValid; 负责返回登录按钮是否可用的信号量。...上面是VM的实现,如果要进行单元测试的话,就对相应的VM类进行初始化,调用相应的函数进行单元测试即可。接着就是看如何在相应的VC模块中使用VM。

    5.9K30

    iOS进阶之传递消息

    Objective-C,如果向某对象传递消息,那就会使用动态绑定机制来决定需要调用的方法。...加入真是个瓶颈的话,那你可以只编写纯C函数,在调用根据需要,把Objective-C对象的状态传进去。...前面讲的这部分内容只描述了部分消息的调用过程,其他“边界情况”,则需要交由Objective-C运行环境的另一些函数来处理 上面曾提到,objc_msgSend等函数一旦找到应该调用的方法实现之后,就会跳转过去...这项优化对objc_msgSend非常关键,如果不这么做的话,那么每次调用Objective-C方法之前,都需要为调用objc_msgSend函数准备“栈帧”,大家在“栈踪迹”可以看到这种“栈帧”。...这样的话,你就会明白,在发送消息时,代码究竟是如何执行的,而且也能理解,为何在调试的时候,栈“回溯”信息总是出现objc_msgSend。 要点 1️⃣消息由接受者、选择子及参数构成。

    76660

    JavaScriptCore全面解析

    这段代码展示了如何在Objective-C执行一段JavaScript代码,并且获取返回值并转换成OC数据打印 Output 三、 JSVirtualMachine 一个JSVirtualMachine...在context上执行一个休眠5秒的JS函数。 首先执行的应该是休眠5秒的JS函数,在此期间,context所处的虚拟机上的其他调用都会处于等待状态,因此tick和tick_2在前5秒都不会有执行。...Block/函数和JS function Objective-C的block转换成JavaScript的function对象。参数以及返回类型使用相同的规则转换。...在OC代码我们这样导出: 在JS代码可以这样调用: 2. 导出OC方法和属性给JS 默认情况下,一个Objective-C类的方法和属性是不会导出给JavaScript的。...6. log 我们为所有的context都添加一个log函数,方便我们在JS向控制台输出日志 九、 导出OC对象给JS 现在我们继续回到Objective-C,看下OC对象是如何导出的 1.

    1.5K20

    iOS RunTime之二:数据结构

    super_class:指向该类的父类,如果该类已经是最顶层的根类(NSObject),则super_class为NULL。 name:这个类的类名。...元类(Meta Class) 在Objective-C,所有的类自身也是一个对象,这个对象里面也有一个isa指针,它指向metaClass(元类),向这个对象发送消息(即调用类方法)。 ?...在Objective-C,只要方法名相同,那么方法的SEL就是一样的,每一个方法都对应着一个SEL,所以在Objective-C,同一个类或者这个类的继承体系,不能存在2个同名的方法,不同的类可以拥有相同的...IMP IMP就是implementation的缩写,本质就是一个函数指针,这个被指向的函数包含一个接收消息的对象id,调用方法的SEL,以及一些方法参数,并返回一个id。...因此我们可以通过SEL获得它所对应的IMP,在取得了函数指针之后,也就意味着我们取得了需要执行方法的代码入口,这样我们就可以像普通的C语言函数调用一样使用这个函数指针。 ?

    56920

    runtime

    - (NSString *)movieTitle 3、Selector Selector 在 Objective-C selector 只是一个 C 的数据结构,用于表示一个你想在一个对象上执行的...然而你可能只调用其中一小部分的方法,也没有意义每次检查时搜索这个类的分发表(dispatch table)的所有 selector。...OC的函数调用成为消息发送,属于 动态调用过程。在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数调用。...在runtime,objc_msgSend()是一个c函数,[obj foo]会被翻译成这样的形式objc_msgSend(obj, foo)。...当调用对象的某个方法的时候, 如果在当前类没有找到此方法, 那么就到当前类的父类中去寻找, 如果在父类没有找到, 那么就去父类的父类中去寻找, 一直找到 NSObject 都没有这个方法, 就会报

    65420

    KVC原理与数据筛选

    (流程的边界判断等已经忽略,想了解可以参考源码,本文只探究主流程。)...如果步骤1没找到对应的方法且 accessInstanceVariablesDirectly == YES, 则查找顺序如下:_,_is,,is; 查找不到则调用...下面进入方法调用阶段:_DSSetUsingKeyValueSetter(self,setter, value); 2 拆包结果:IMP指针为_DSSetIntValueForKeyWithMethod...3 KVC执行流程 3.2 取值 3.2.1 查找访问器方法或成员变量 【Objective-c】 + (DSKeyValueGetter *)_d_createValueGetterWithContainerClassID...: 5 get IMP调用 04 简单数据类型KVC包装和拆装关系 理解,首先 MCube 会依据模板缓存状态判断是否需要网络获取最新模板,当获取到模板后进行模板加载,加载阶段会将产物转换为视图树的结构

    86320

    Objective-C Runtime编程指南(1)

    您只需编写和编译Objective-C源代码即可使用它。 编译包含Objective-C类和方法的代码时,编译器将创建实现该语言动态特性的数据结构和函数调用。...这些函数的许多函数允许您使用plain C来复制编译Objective-C代码时编译器的功能。 其他形成了通过NSObject类的方法导出功能的基础。...一旦找到selector,objc_msgSend函数调用在表输入的方法,并将接收对象的数据结构传递给方法。...Objective-C方法只是一个C函数,它至少需要两个参数self和_cmd。 您可以使用函数class_addMethod将函数添加到类。...在上面的例子,看起来好像Warrior类继承了Diplomat以及它自己的超类。 转发提供了您通常希望从多重继承获得的大部分功能。

    79220

    类的本质-类对象

    类名其实就是类对象) 格式:[类名 class]; :[Dog class] 3.类对象的用法 用来调用类方法 [Dog test]; Class c = [Dog class]; [c test]...每一个类都描述了一系列它的实例的特点,包括成员变量的列表,成员函数的列表等。 每一个对象都可以接受消息,而对象能够接收的消息列表是保存在它所对应的类。...当对象收到消息时,消息函数首先根据该对象的isa 指针找到该对象所对应的类的方法表,并从表寻找该消息对应的方法selector。...如果在缓存已经有了需要的方法选标,则消息仅仅比函数调用慢一点点。如果程序运行了足够长的时间,几乎每个消息都能在缓存中找到方法实现。程序运行时,缓存也将随着新的消息的增加而增加。...回想一下,我们从一个数组取出来的对象,其返回值是id类型的。这就是为什么我们可以在这个取出来的对象身上通过括号”[ ]”的形式调用任何方法,却不能通过点语法来调用方法。

    9.3K50

    JavaScriptCore全面解析 (上篇)

    作者:殷源,专注移动客户端开发,微软Imagine Cup中国区特等奖获得者,现就职于腾讯。...这段代码展示了如何在Objective-C执行一段JavaScript代码,并且获取返回值并转换成OC数据打印 //创建虚拟机 JSVirtualMachine *vm = [[JSVirtualMachine...在context上执行一个休眠5秒的JS函数。 首先执行的应该是休眠5秒的JS函数,在此期间,context所处的虚拟机上的其他调用都会处于等待状态,因此tick和tick_2在前5秒都不会有执行。...JSContext执行JS代码 调用evaluateScript函数可以执行一段top-level 的JS代码,并可向global对象添加函数和对象定义 其返回值是JavaScript代码中最后一个生成的值...Block/函数和JS function Objective-C的block转换成JavaScript的function对象。参数以及返回类型使用相同的规则转换。

    13.9K142
    领券