阅读开源项目的源代码是提高自己编程能力的好方法,而有一个好的源代码阅读工具无疑能够让你在阅读源代码时事半功倍。之前找过不少源代码阅读工具,像SourceInsight、sourcenav、scitools等,但是这些工具要么是收费的,要么只有windows版本。sourcenav虽然是开源的,但是个人觉得不是很好用。直到最近毕设时老师要求用doxygen生成代码文档,在使用doxygen的过程中,突然发现这个东西配合上浏览器其实就是一个很好的源码阅读工具,所以给大家推荐一下。

废话不多说,相信大家都知道doxygen是一个用来生成源码文档的工具,不少有名的开源项目想opencv,boost都是用它来生成文档的。虽然正常要生成一份详细的文档需要我们在代码中按照一定格式写注释,但是doxygen也能够从没有这些注释的源码中抽取出函数定义、类定义、变量定义、宏定义等信息,并且能够提供交叉引用,为我们阅读代码提供方便。我这里用一个开源项目Google Protobuf来做一下演示。

首先按照安装教程(http://www.stack.nl/~dimitri/doxygen/manual/install.html)安装好doxygen。

进入存放项目的目录,运行doxygen -g命令,生成Doxygen配置文件Doxyfile

Doxygen配置文件默认名为Doxyfile,这里面是一些格式为 KEY  =  VALUE的键值配置属性,如下图。每一个属性前都有相应的说明,doxygen会根据这些配置属性来生成文档。

我们要编辑器打开Doxyfile后设置如下属性 (因为文件比较大,需要使用编辑器的查找功能找到这些属性。

INPUT = protobuf-2.5./src  (设置项目源代码目录的路径,相对于Doxyfile的位置)

PROJECT_NAME = "ProtoBuf"  (项目名默认为My Project)

OUTPUT_DIRECOTRY = doc     (设置文档输出路径,相对于Doxyfile的位置)

RECURSIVE = YES            (设置递归查找所有子目录,默认NO只查找当前目录)

EXTRACT_ALL = YES           (设置抽取代码中所有实体,默认NO只抽取有doxygen注释的实体)

SOURCE_BROWSER = YES        (生成交叉引用)

INLINE_SOURCES = YES         (将源代码包含进文档,默认NO只包含声明,不包含定义)

OUTPUT_LANGUAGE = Chinese    (设置文档语言为中文)

设置后保存,运行doxygen命令生成文档。

可以看到当前目录多除了doc/html,和doc/latex目录,分别包含了html格式和latex格式的文档。我们在doc/html目录下用浏览器打开index.html。可以看到代码实体按命名空间,类,文件三种方式组织。其中类可以查看类列表,类索引,类继承关系,和类成员等。

我们选择google::protobuf::internal::ExtensionFinder类看看具体信息。

可以看到类继承关系图,成员函数,详细描述下还有成员函数的函数原型和跳转到函数定义的链接(截图比较大就不发了)。

其中蓝色的链接点击后可跳转到函数的具体实现处。

可以看到在查看具体实现时,所有的蓝色链接都代表了项目中定义的实体,如函数,类,成员等。鼠标悬浮上可以看到简要信息,也可以点击跳转到详细信息。这样在看源码时遇到一个不清楚的东西就能够随时看到它的定义。再配合上浏览器原有的返回,跳转,在新标签打开页面等功能,阅读源码就变得十分方便了。

好了,我的介绍就到这,有兴趣的朋友可以自己试一试,谢谢~

利用doxygen提高源代码阅读效率的更多相关文章

  1. 利用mock提高效率

    利用mock提高效率 谈到mock,就不得不讲前后端分离.理想情况下前后端不分离,由全栈的人以product和infrastructure的维度进行开发,效率是最高的.近些年来业务的复杂度越来越高,真 ...

  2. [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中)

    [.net 面向对象程序设计进阶] (17) 多线程(Multithreading)(二) 利用多线程提高程序性能(中) 本节要点: 上节介绍了多线程的基本使用方法和基本应用示例,本节深入介绍.NET ...

  3. [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上)

    [.net 面向对象程序设计进阶] (16) 多线程(Multithreading)(一) 利用多线程提高程序性能(上) 本节导读: 随着硬件和网络的高速发展,为多线程(Multithreading) ...

  4. 非常好!!!Linux源代码阅读——环境准备【转】

    Linux源代码阅读——环境准备 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/0_prepare.html 目录 Linux 系统环境准备 ...

  5. 非常好!!!Linux源代码阅读——中断【转】

    Linux源代码阅读——中断 转自:http://home.ustc.edu.cn/~boj/courses/linux_kernel/2_int.html 目录 为什么要有中断 中断的作用 中断的处 ...

  6. XV6源代码阅读-进程线程

    Exercise1 源代码阅读 1.基本头文件:types.h param.h memlayout.h defs.h x86.h asm.h mmu.h elf.h types.h:仅仅是定义uint ...

  7. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  8. 提高 JavaScript 开发效率的高级 VSCode 扩展!

    原文:提高 JavaScript 开发效率的高级 VSCode 扩展! 作者:前端小智 Fundebug经授权转载,版权归原作者所有. Quokka.js Quokka.js 是一个用于 JavaSc ...

  9. 提高SQL查询效率的30种方法

    转载:提高SQL查询效率的30种方法 内容摘录如下: 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中 ...

随机推荐

  1. 常用汇编命令&&OD命令总结

    汇编32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX)对低16位数据的存取,不会影响高16位的数据.这些低16位寄存器分别命名为:AX.BX.CX和DX,它和先前的CPU ...

  2. asp 文件上传(无组件上传)

    文件1.上传界面文件 upload.htm<html><head><meta http-equiv="Content-Language" conten ...

  3. shuffle过程中的信息传递

    依据Spark1.4版 Spark中的shuffle大概是这么个过程:map端把map输出写成本地文件,reduce端去读取这些文件,然后执行reduce操作. 那么,问题来了: reducer是怎么 ...

  4. Nagios3完整配置文档

    第一章:简单快速安装nagios 1.1 准备软件包 在做安装之前确认要对该机器拥有root权限. 确认你安装好的linux系统上已经安装如下软件包再继续. Apache GCC编译器 GD库与开发库 ...

  5. use sql trigger call java function

    Use UDF sys_exec to do this. You can use this link to use sys_exec function. It says, sys_exec sys_e ...

  6. Nagios监控部署(转)

    转自 http://kyhack.blog.51cto.com/490370/213355 ky.blog 一.nagios简介        nagios是一款用于系统和网络监控的应用程序,它可以在 ...

  7. 每次都觉得很神奇的JS

    匿名,函数对象... var staff = [ {name: 'abruzzi', age: 24}, {name: 'bajmine', age: 26}, {name: 'chris', age ...

  8. linux jps 命令

    参考: http://blog.csdn.net/gtuu0123/article/details/6025520 http://blog.csdn.net/alivetime/article/det ...

  9. SDIBT2666——逆波兰表达式求值

    逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+ ...

  10. JavaScript定时器详解及实例

    JS里设定延时: 使用SetInterval和设定延时函数setTimeout 很类似.setTimeout 运用在延迟一段时间,再进行某项操作. setTimeout("function& ...