使用egypt+graphviz分析ffplay的函数调用关系图

本文详细介绍了如何从ffmpeg源码一步步生成ffplay的函数调用关系图,包括下载源码、编译、生成RTL和DOT文件、使用egypt和graphviz分析、去除编译优化以及手动调整过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在《Ffplay视频播放流程》文章中我给出了一个ffplay的函数调用关系图,在分析代码上会有不小的帮助。那么本文就详细的描述如何从源码中一步步的得到我们想要的函数调用关系图。

前置条件

下载ffmpeg源码

安装graphviz:sudo>http://www.gson.org/egypt/

编译整个ffmepg

我采用的是默认配置+直接编译的方式,即./configure &&>ffmpeg$ makeCC ffplay.oLD ffplay_gCP ffplaySTRIP ffplay
我们从上述输出中可以看到,编译ffplay主要有四步:编译(CC),链接(LD),重命名(CP),去除符号表操作(STRIP),其中编译阶段是我们重点要分析的,因为编译是对源码的直接分析和处理。

生成RTL文件

确定了需要在编译ffplay的步骤后,我们在makefile中找到具体的编译函数:

define COMPILE
       $(call $(1)DEP,$(1))
       $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $<
endef

因为是编译ffplay.c文件,即此处的$(1)指的是CC,对应的$($(1)FLAGS)就是$(CCFLAGS),而CCFLAGS的定义中包含$(CFLAGS),即按照 egypt中的说明,我们在$(CFLAGS)的定义中添加-fdump-rtl-expand参数即可在make的时候成成RTL文件:

CFLAGS     += $(ECFLAGS) -fdump-rtl-expand
并且在COMPILE函数中将$($(1)FLAGS)的值打印出来,那么再次修改ffplay.c并编译后的输出如下:

-I. -I./ -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGE
在Ubuntu 18.04系统中,为了深入分析FreeRTOS这样的开源实时操作系统项目的源码,我们可以借助egyptgraphviz工具生成函数调用关系图。这种方法可以有效地展示函数间的调用层次和关系,从而提高源码阅读和调试的效率。具体步骤如下: 参考资源链接:[Ubuntu1804源码阅读:egypt+graphviz函数调用图详解](https://wenku.youkuaiyun.com/doc/64531dedea0840391e76e671) 首先,确保你的系统已经安装了graphvizegypt。可以通过以下命令安装graphviz: ```bash sudo apt-get install graphviz ``` 对于egypt,需要从官方源下载源码,解压并赋予执行权限: ```bash tar -xf egypt-1.10.tar.gz cd egypt-1.10 sudo chmod +x egypt sudo cp egypt /usr/bin ``` 安装完成后,开始生成函数调用图。首先,编写或选择你要分析的FreeRTOS源文件,然后使用egypt生成DOT文件: ```bash egypt freertos_source_files | dot -Tpng -o output_image.png ``` 这里`freertos_source_files`代表FreeRTOS项目的源代码文件列表,`output_image.png`是生成的PNG格式的图形文件。通过这个命令,egypt会解析源代码并生成一个DOT语言的描述文件,然后dot工具会根据这个文件生成可视化的图形。 在生成图形的过程中,你可能会需要调整命令行参数以适应具体的项目结构和需求,例如,指定包含或排除特定的文件或函数。 最后,使用图形查看器(如`display`或`eog`)打开生成的PNG图像文件,你将看到FreeRTOS项目中函数的调用关系图。这样的图形可以让你直观地理解程序的结构和流程,对于识别关键代码路径和理解系统行为非常有帮助。 通过这种方式,你可以有效地利用egyptgraphviz工具,将复杂的代码结构转换为图形化表示,进一步加深对FreeRTOS项目代码的理解。如果在使用过程中遇到问题,或者需要更深入的了解如何定制和优化生成的函数调用图,可以参考《Ubuntu1804源码阅读:egypt+graphviz函数调用图详解》这本教程,它详细介绍了如何利用这两个工具来提升源码阅读的效率和深度。 参考资源链接:[Ubuntu1804源码阅读:egypt+graphviz函数调用图详解](https://wenku.youkuaiyun.com/doc/64531dedea0840391e76e671)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值