最近这段时间在阅读 RTKLIB的源代码,目前是将 pntpos.c文件的部分看完了,准备写一份文档记录下这些代码的用处、处理过程、理论公式来源、注意事项,自己还没有弄明白的地方。目前的想法是把每一个函数都做成一个名片,这个名片内则包含代码的功能说明、参数说明、函数调用关系图、整体处理过程、注意事项和自己的疑惑这几个部分。而在这个名片内出现的其他函数(包括在文字和调用关系图中出现的)则使用超链接链接到其他函数名片内。然而我并不想自己去手工绘制函数调用关系图,于是就百度了一下,这才发现关于接口文档、说明文档、函数调用关系图这些辅助开发文档早就有人做了专门的软件来高效、有组织地来解决这些问题了。

关于函数调用关系图,在 Linux和 Windows平台下也都有不同的解决方案,搜索一下就能找到很多与之相关的技术文档。目前我是只使用 Windows,这里着重说一下 Windows里中合适的解决方案。

1. 直接使用 VS自带的关系图功能生成调用关系图。对于 windows平台下经常使用 VS来开发的人来说,这毫无疑问是最简单的方法。不过我并没有用这种方法,一来我看了一下,感觉生成的代码图不够直观,有些函数会被折叠;二来目前我并不打算使用 VS来编译 RTKLIB源码,我现在一直是用 NotePad++来编辑、阅读源码的。

2. source insight,好是好,可是在别人的博客中看到,说在SI生成的调用关系图中,当两个函数调用同一个底层函数时,该底层函数会分别出现在两个函数调用图的下面,因此这种方法也不能最快的看出那些经常被调用的底层函数,感觉同一幅图中,同一个函数多次出现,看起来就很冗余,也不好。

3.Doxygen+GraphViz+HtmlHelp,这也是我写这篇博客所想要介绍的。详细内容见 《Windows平台下Doxygen+GraphViz+HtmlHelp自动生成函数调用关系图》(本来想直接转载该篇博客的,但又懒得去联系其作者,遂置一链接于此),下面主要写几个我再按照这篇博客操作时遇到的问题。

1. 给出的Graphviz的下载目录不可用,如下图1所示。这个问题不难,自己去官网下载 windows版本的就行。这里我下载的版本如图2所示,要注意的是这个不是安装包,直接就可以用,所以某些情况下需要自己设置环境变量。而对于本次和 Doxygen联用,则不需要,因为在新建 Doxygen工程时,需要指定 Graphviz的所在目录。

图 1

图 2

2. 生成的调用图中有时候会包含太多底层函数,使整个图反而变得看上去很乱,如下图3所示。这可以在 Doxygen中进行设置,与之有关的参数有两个,DOT_GRAPH_MAX_NODES和 MAX_DOT_GRAPH_DEPTH,分别控制图中的最大节点数和节点深度,如下图 4所示。节点深度默认为 0,即不进行深度控制,用户可自行设置。只是需要注意,深度也不宜太小。比如对于图 5中的调用关系,当设置深度为 1时,C就不会显示出来。

图 3 MAX_DOT_GRAPH_DEPTH=0时的函数调用图

图 4

图 5

我也是今天才发现这个神奇的东西,所关于源码分析工具也就先说到这里。前段时间在打算开始阅读 RTKLIB源码时就在想,阅读开源代码有没有什么“黑科技”,当时出于懒惰没有去查找相关的资料,现在吃了苦头才发现,只能说“技术上可以偷懒,想法上不能偷懒”。做事情都有前人的经验和技巧,善用此道,才能真正偷得到懒。

(最后,我还是要吐槽一下博客园的编辑界面和显示界面,横向上太宽了,真的不如 cmd Markdown写起来方便、美观)

Windows平台下源码分析工具的更多相关文章

  1. Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新

    SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...

  2. Linux平台下源码安装mysql多实例数据库

    Linux平台下源码安装mysql多实例数据库[root@linux-node1 ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6 ...

  3. 分布式调度平台XXL-JOB源码分析-调度中心

    架构图 上图是我们要进行源码分析的2.1版本的整体架构图.其分为两大块,调度中心和执行器,本文先分析调度中心,也就是xxl-job-admin这个包的代码. 关键bean 在application.p ...

  4. Windows 平台下局域网劫持测试工具 – EvilFoca

    简介 安全测试工具可能含有攻击性,请谨慎适用于安全教学及学习用途,禁止非法利用! EvilFoca是Windows环境下基于.NET FrameWork的一款轻量级的劫持测试工具.与BackTrack ...

  5. jquery源码分析-工具函数

    jQuery的版本一路狂飙啊,现在都到了2.0.X版本了.有空的时候,看看jquery的源码,学习一下别人的编程思路还是不错的. 下面这里是一些jquery的工具函数代码,大家可以看看,实现思路还是很 ...

  6. 分布式调度平台XXL-JOB源码分析-执行器端

    上一篇文章已经说到调度中心端如何进行任务管理及调度,本文将分析执行器端是如何接收到任务调度请求,然后执行业务代码的. XxlJobExecutorApplication为我们执行器的启动项,其中有个X ...

  7. 分布式调度平台XXL-JOB源码分析-时序图

    整体流程 初始化 任务调度 任务执行 任务回调 注册心跳

  8. ubuntu下linux内核源码阅读工具和调试方法总结

    http://blog.chinaunix.net/uid-20940095-id-66148.html 一 linux内核源码阅读工具 windows下当然首选source insight, 但是l ...

  9. Redis学习之zskiplist跳跃表源码分析

    跳跃表的定义 跳跃表是一种有序数据结构,它通过在每个结点中维持多个指向其他结点的指针,从而达到快速访问其他结点的目的 跳跃表的结构 关于跳跃表的学习请参考:https://www.jianshu.co ...

随机推荐

  1. LeetCode 122.买卖股票的最佳时机(C++)

    给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必须在再次 ...

  2. 数据结构之C语言模拟整数数组实现

    #include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Arr { in ...

  3. CSS选择器比较:queryselector queryselectorall

    官网解释: querySelector() and querySelectorAll() are two JavaScript functions very useful when working w ...

  4. 比特币--私钥->公钥->钱包地址

    脑钱包-字符串SHA256散列成256bit当做私钥-彩虹表 脑钱包是开源的程序-->用户输入字符串当做密码-->经过SHA256散列算法-->256长bit位 (即是私钥)--&g ...

  5. jQuery 间歇式无缝滚动特效分享(三张图片平行滚动)

    最近项目中门户首页需要做出图片间歇式无缝滚动特效,但是在网上找资料都是不太理想,不过可以指导.最后自己写了一个demo实现了这个特效,分享出来. 1.jquery.cxscroll.js /*! * ...

  6. 前端模块化 、包管理器、AMD、 CMD、 require.js 、sea.js

    问题由来,为什么要前端模块化管理: 假设我们有个组件名为Acomponent.js, 是架构封装的,里面依赖另一个公司公用库common.js: 那我们引入Acomponent.js的时候,怎么知道要 ...

  7. golang and mogodb

    1.golang的mogodb包下载:http://gopkg.in/mgo.v2    http://gopkg.in/mgo.v2/bson 2.golang的mongodb操作(mgo):htt ...

  8. GitHub webstorm 及 README.md 姿势

    README.md 语法格式: 规范的README文件开头都写上一个标题,这被称为大标题. 标题: #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 ...

  9. <Android开源库 ~ 1> GitHub Android Libraries Top 100 简介

    转载自GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitH ...

  10. 解决Pandoc wasn't found.pdflatex not found on PATH

    解决nbconvert failed: Pandoc wasn't found.解决nbconvert failed: pdflatex not found on PATH 问题1描述 500 : I ...