Windows平台下源码分析工具
最近这段时间在阅读 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平台下源码分析工具的更多相关文章
- Android8.1 MTK平台 SystemUI源码分析之 网络信号栏显示刷新
SystemUI系列文章 Android8.1 MTK平台 SystemUI源码分析之 Notification流程 Android8.1 MTK平台 SystemUI源码分析之 电池时钟刷新 And ...
- Linux平台下源码安装mysql多实例数据库
Linux平台下源码安装mysql多实例数据库[root@linux-node1 ~]# netstat -tlunp | grep 330tcp6 0 0 :::3306 :::* LISTEN 6 ...
- 分布式调度平台XXL-JOB源码分析-调度中心
架构图 上图是我们要进行源码分析的2.1版本的整体架构图.其分为两大块,调度中心和执行器,本文先分析调度中心,也就是xxl-job-admin这个包的代码. 关键bean 在application.p ...
- Windows 平台下局域网劫持测试工具 – EvilFoca
简介 安全测试工具可能含有攻击性,请谨慎适用于安全教学及学习用途,禁止非法利用! EvilFoca是Windows环境下基于.NET FrameWork的一款轻量级的劫持测试工具.与BackTrack ...
- jquery源码分析-工具函数
jQuery的版本一路狂飙啊,现在都到了2.0.X版本了.有空的时候,看看jquery的源码,学习一下别人的编程思路还是不错的. 下面这里是一些jquery的工具函数代码,大家可以看看,实现思路还是很 ...
- 分布式调度平台XXL-JOB源码分析-执行器端
上一篇文章已经说到调度中心端如何进行任务管理及调度,本文将分析执行器端是如何接收到任务调度请求,然后执行业务代码的. XxlJobExecutorApplication为我们执行器的启动项,其中有个X ...
- 分布式调度平台XXL-JOB源码分析-时序图
整体流程 初始化 任务调度 任务执行 任务回调 注册心跳
- ubuntu下linux内核源码阅读工具和调试方法总结
http://blog.chinaunix.net/uid-20940095-id-66148.html 一 linux内核源码阅读工具 windows下当然首选source insight, 但是l ...
- Redis学习之zskiplist跳跃表源码分析
跳跃表的定义 跳跃表是一种有序数据结构,它通过在每个结点中维持多个指向其他结点的指针,从而达到快速访问其他结点的目的 跳跃表的结构 关于跳跃表的学习请参考:https://www.jianshu.co ...
随机推荐
- 快速创建jquery插件
介绍 什么是插件? 插件我们见得很多了,比如浏览器上我们会安装一些去除广告的插件.美化页面的插件等等. 在前端,我们也常常写一些jquery插件来使用.来添加我们常常写的一些功能,方便使用. 为什么要 ...
- 60、Docker 学习笔记(CentOS 7.1)
#基本概念 -x86_64-minimal.tar.gz | docker import - centos:v7.mini``` 然后查看导入的镜像: ##上传镜像 >用户可以通过 docker ...
- pat1057. Stack (30)
1057. Stack (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Stack is one of ...
- 介绍几个关于C/C++程序调试的函数
最近调试程序学到的几个挺有用的函数,分享一下,希望对用C/C++的朋友有所帮助! 1. 调用栈系列下面是函数原型: 1 2 3 4 #include "execinfo .h" i ...
- GOPS 2018全球运维大会上海站 参会感悟梳理
今天遇到很多优秀的讲师.业界的大伽,很开心 现在把get到的信息梳理一下:(1)想解决性能问题,一定要在缓存上下功夫:[nginx上有好多文章可以做,真是博大精深呢<深入理解Nginx:模块开发 ...
- ajax多次请求的一个效果思路
首先页面加载时候显示遮罩层 jQuery(function() { show_dialog(); //tianxie(); }); 定义一个全局数组,用于存放问题id var qar = []; 循环 ...
- Echarts学习笔记
1.Ecahrts使用首先需要引用js文件 Echarts.js 然后定义一个带id的容器(div就可以) 然后就可以初始化echarts了 ↓这是柱形图 <h2 class="con ...
- .NET 后台动态添加GridView列
BoundField bfColumn1 = new BoundField(); bfColumn1.DataField = "zbcompanyname"; bfColumn1. ...
- PHP保存Base64图片base64_decode的问题
PHP对Base64的支持非常好,有内置的base64_encode与base64_decode负责图片的Base64编码与解码. 编码上,只要将图片流读取到,而后使用base64_encode进行进 ...
- Android 切换主题换肤实现
思路以及实现 1.主题的切换以及实现 首先我们先来明确个概念,现在我所说的切换主题,就切换整个app的颜色风格,当然也有少部分的图片的切换.注意哦 我这边说的是少部分图片哦!如果是大面积的换图片的吧! ...