0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何提高阅读源码的效率

FPGA之家 来源:小麦大叔 作者:小麦大叔 2022-07-06 10:01 次阅读

我发现函数调用图可以让我们更加直观地了解到源码函数直接的调用和层次关系,提高阅读源码的效率。

1 前言

看源码的时候,心血来潮想弄一下函数之前的调用关系,想起以前doxygen配合graphviz使用可以生成比较直观的函数调用关系图,但是前提是函数的注释需要严格按照doxygen的规范,具体可以自己去搜索一下,当然使用source insight等利器也很方便;

本文主要通过gcc+egypt+graphviz(dot)三个工具轻松生成源码的函数调用关系图;下图是本人在阅读FreeRTOS源码tasks.c时生成的调用关系图,具体如下所示;

045f7db6-fcc3-11ec-ba43-dac502259ad0.png一个例子

2 graphviz 安装

Graphviz (Graph Visualization Software的缩写)是一个由AT&T实验室启动的开源工具包,用于绘制DOT语言脚本描述的图形。ubuntu下可以直接安装;

sudoapt-getinstallgraphviz

直接输入指令后,系统开始安装;046f787e-fcc3-11ec-ba43-dac502259ad0.png

成功安装graphviz,这里我们就可以使用dot工具了,具体使用方法如下;

04840af0-fcc3-11ec-ba43-dac502259ad0.png

3 egypt 安装

egypt官网: http://www.gson.org/egypt/

049544b4-fcc3-11ec-ba43-dac502259ad0.png简洁的首页

下载后的文件为egypt-1.10.tar.gz;找到文件所在路径;

sudofind-nameegypt-1.10.tar.gz

然后解压:

sudotar-xvfegypt-1.10.tar.gz

解压得到egypt-1.10;

cdegypt-1.10&&sduochmod+xegypt

最终可以看到文件结构如下;

04b8cbe6-fcc3-11ec-ba43-dac502259ad0.png

将egypt移动到/usr/bin,方便后面直接调用,或者将当前egypt所在路径添加到环境变量中;

sudocpegypt/usr/bin

以上,已经完成了egypt的安装;

使用方法如下;

egypt[--omitfunction,function,...][--include-external]...|dotty-
egypt[--omitfunction,function,...][--include-external]...|dot

4 测试

编写程序test.c,具体如下所示;

#include

voidtest0();
voidtest1();
voidtest2();
voidtest3();

intmain()
{
test1();
test2();
test3();
return0;
}

voidtest0(void){
printf("hello");
}

voidtest1(void)
{
test0();
}

voidtest2(void)
{
test1();
}

voidtest3(void)
{

}

编译需要加上参数-fdump-rtl-expand生成相应的dump文件;

gcc-fdump-rtl-expand-ctest.c

04c8f034-fcc3-11ec-ba43-dac502259ad0.png

这里有我们需要的文件test.c.229r.expand;

输入如下指令;

egypttest.c.229r.expand|dot-Tpng-otest.png

最终生成了顺利生成test.png,具体如下图所示;

04d42850-fcc3-11ec-ba43-dac502259ad0.png最终调用关系图

5 结论

C语言源码的阅读用这个办法还是有点小麻烦,无法一键生成调用关系,,

另外还需要gcc编译源码生成dumpfile文件,如果想要方便一些,可能还需要自己写脚本实现自动化,如果大佬有更好的办法,欢迎留言区讨论。

原文标题:一个超级实用的源码阅读小技巧

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

审核编辑:彭静

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    180

    文章

    7591

    浏览量

    135813
  • 源码
    +关注

    关注

    8

    文章

    632

    浏览量

    29108
  • 函数
    +关注

    关注

    3

    文章

    4276

    浏览量

    62317

原文标题:一个超级实用的源码阅读小技巧

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何提高伺服驱动器的效率

    在现代工业自动化领域,伺服驱动器的效率对于整个系统的能效和性能至关重要。本文探讨了影响伺服驱动器效率的关键因素,并提出了一系列提高效率的策略,包括优化控制算法、改善硬件设计、采用先进的功率电子技术
    的头像 发表于 11-04 15:20 103次阅读

    MES系统如何提高生产效率

    在当今竞争激烈的制造行业中,提高生产效率是企业生存和发展的关键。MES系统作为一种先进的制造管理工具,已经成为许多制造企业提高生产效率的重要手段。 1. 实时监控与数据收集 MES系统
    的头像 发表于 10-27 09:16 211次阅读

    提高LLC转换器的ZVS和效率

    电子发烧友网站提供《提高LLC转换器的ZVS和效率.pdf》资料免费下载
    发表于 10-14 10:03 0次下载
    <b class='flag-5'>提高</b>LLC转换器的ZVS和<b class='flag-5'>效率</b>

    东莞mes系统:提高生产效率的利器

    东莞作为中国制造业的重要基地之一,拥有众多制造企业,其中不乏一些领先的MES系统供应商。这些 MES系统供应商 致力于为东莞的制造企业提供智能制造解决方案,帮助企业提高生产效率、降低生产成本、提升
    的头像 发表于 05-21 15:37 403次阅读

    提高效率的DC电源模块设计技巧

    BOSHIDA  提高效率的DC电源模块设计技巧 设计高效率的BOSHIDA  DC电源模块可以帮助减少能源浪费和提高系统功耗,以下是一些设计技巧: 1. 选择高效率的功率转换器:选择
    的头像 发表于 02-26 14:27 475次阅读
    <b class='flag-5'>提高效率</b>的DC电源模块设计技巧

    提高电源整机效率的方法

    电源整机效率是指电源将输入电能转换为输出电能的效率,通常用百分比表示。提高电源整机效率可以降低能源消耗,减少环境污染,提高设备的运行
    的头像 发表于 01-17 15:57 643次阅读

    Apache Doris聚合函数源码解析

    笔者最近由于工作需要开始调研 Apache Doris,通过阅读聚合函数代码切入 Apache Doris 内核,同时也秉承着开源的精神,开发了 array_agg 函数并贡献给社区。笔者通过这篇文章记录下对源码的一些理解,同时也方便后面的新人更快速地上手
    的头像 发表于 01-16 09:52 928次阅读
    Apache Doris聚合函数<b class='flag-5'>源码</b>解析

    提高系统效率的几个误解解析

    重复使用才会提高系统效率。所以在通信系统中一般只打开指令CACHE,数据CACHE即使打开也只局限在部分存储空间,如堆栈部分。同时也要求程序设计 要兼顾CACHE的容量及块大小,这涉及到关键代码循环体
    发表于 01-15 07:29

    OneFlow Softmax算子源码解读之WarpSoftmax

    写在前面:近来笔者偶然间接触了一个深度学习框架 OneFlow,所以这段时间主要在阅读 OneFlow 框架的 cuda 源码。官方源码基于不同场景分三种方式实现 Softmax,本文主要介绍其中一种的实现过程,即 Warp 级
    的头像 发表于 01-08 09:24 698次阅读
    OneFlow Softmax算子<b class='flag-5'>源码</b>解读之WarpSoftmax

    SiC FET神应用,在各种领域提高功率转换效率

    SiC FET神应用,在各种领域提高功率转换效率
    的头像 发表于 11-30 09:46 385次阅读
    SiC FET神应用,在各种领域<b class='flag-5'>提高</b>功率转换<b class='flag-5'>效率</b>

    如何提高电源适配器的效率

    如何提高电源适配器的效率提高电源适配器的效率对于节能和环境保护至关重要。在本文中,我们将讨论一些可以提高电源适配器
    的头像 发表于 11-23 16:04 957次阅读

    如何提高电源适配器的效率因数?

    如何提高电源适配器的效率因数? 提高电源适配器的效率因数是提高能源利用效率的一种重要措施。通过
    的头像 发表于 11-23 14:51 744次阅读

    《Android Runtime源码解析》+深入体会第六章ART的执行(4)

    和技能,不断提高自己的专业素养。以上就是我在阅读\"Android Runtime源码解析\"这部分内容后的心得体会。 我希望这些体会能对你有所帮助! 谢谢! 本人在本论坛内的试读
    发表于 11-17 01:33

    提高开关电源待机效率的方法

    电子发烧友网站提供《提高开关电源待机效率的方法.doc》资料免费下载
    发表于 11-15 10:42 0次下载
    <b class='flag-5'>提高</b>开关电源待机<b class='flag-5'>效率</b>的方法

    epoll源码分析

    个函数进行源码分析。 源码来源 由于epoll的实现内嵌在内核中,直接查看内核源码的话会有一些无关代码影响阅读。为此在GitHub上写的简化版TCP/IP协议栈,里面实现了epoll逻
    的头像 发表于 11-13 11:49 955次阅读
    epoll<b class='flag-5'>源码</b>分析