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

    文章

    7604

    浏览量

    136721
  • 源码
    +关注

    关注

    8

    文章

    639

    浏览量

    29187
  • 函数
    +关注

    关注

    3

    文章

    4329

    浏览量

    62578

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

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

收藏 人收藏

    评论

    相关推荐

    怎样提高三坐标测量机的测量效率

    提高三坐标测量机的测量效率是许多制造和质量控制领域中的一个关键问题。三坐标测量机(CMM)是一种精密的测量设备,用于检测零件的几何尺寸和形状。以下是一些提高三坐标测量机测量效率的方法,
    的头像 发表于 12-19 10:20 127次阅读

    如何提高poe供电效率

    提高PoE(Power over Ethernet,以太网供电)供电效率是一个涉及多个方面的综合性问题。以下是一些具体的建议,旨在帮助提高PoE供电效率: 一、优化PoE设备选择与设计
    的头像 发表于 11-19 10:45 211次阅读

    如何提高CNC加工效率

    在当今竞争激烈的制造业环境中,提高CNC加工效率是企业保持竞争力的关键。CNC机床的效率不仅影响生产成本,还关系到产品质量和交货速度。 1. 优化CNC程序 1.1 减少空行程 CNC程序中的空行
    的头像 发表于 11-12 09:18 494次阅读

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

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

    MES系统如何提高生产效率

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

    如何提高云计算的性能和效率

    提高云计算的性能和效率是一个多维度的问题,需要从计算性能、存储性能、网络性能等多个方面入手。以下是一些具体的策略和方法: 一、计算性能优化 资源分配 : 根据用户需求动态分配资源,以提高服务器
    的头像 发表于 10-24 09:23 478次阅读

    提高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 449次阅读

    深圳MES系统如何提高生产效率

    深圳MES系统可以通过多种方式提高生产效率,具体如下: 实时监控和分析:MES系统可以实时收集并分析生产数据,帮助企业及时了解生产状况,发现问题并迅速解决,避免问题扩大化。这种实时监控和分析功能可以
    的头像 发表于 03-25 14:34 454次阅读

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

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

    提高电源整机效率的方法

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

    Apache Doris聚合函数源码解析

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

    探秘四轴按键测试机:提高生产效率的利器

    探秘四轴按键测试机:提高生产效率的利器?|深圳磐石
    的头像 发表于 12-25 09:11 609次阅读
    探秘四轴按键测试机:<b class='flag-5'>提高</b>生产<b class='flag-5'>效率</b>的利器