1、在具备必需的编程基础知识后,试图理解一份完整的代码可以从以下几个方面入手: 
  1)首先运行以下程序,从外部角度感受一下有哪些功能。
  2)了解代码中每个类的功能。看看文档,或者类的注释,那么仅仅是类名也能对类有个大致的印象 
  3)整理各个类之间的引用、包含等关系,从功能和实现角度,理出类的层次关系 
  4)在得出类的层次关系的基础,把重点放在各个层次的核心类中,往往核心类包含的功能较为多而复杂,争取明白它包含那几组接口,实现了那些功能。同时,这里重要的一点是,对于一些工具类,算法类,或者实现某些特殊系统功能的类,不管它多么复杂,代码多么长,只要不是类层次关系上的几个核心类,先全扔到一边去。 
  5)运行,调试,设置断点。不断验证修正你先前整理的类层次关系。 
  6)至此,你应该对功能有一个整体印象,也能找到实现对应功能的代码。回头翻一下你的任务安排,定位到对应的代码上,开始啃吧,到这里已经没有多少花招可言了。

2、没有注释,程序就像天书一样,需要花大量的时间去理解。

3、看原码就像抓葡萄一样,得找把。抓住把就好说了。MFC程序以下几个函数很重要: CWinApp::InitInstance()、CWinApp::ExitInitInstance()、CView::OnCreate()、 CView::OnInitUpdate()、CMainFrame::OnCreate()、CMainFrame::CreateClient()。 这些函数一般都含有创建和初始化的重要信息。顺着他们看就能逐渐理清程序的脉络。 由资源编辑器看代码也是不错的选择。比如想看某个按钮的代码,双击就是了。 还有,如果程序员代码写得很标准的话,那么各个构造函数,往往是成员变量赋初值的地方。 不过要看SDK的代码就不是这样了,他们可没那么直观。 SDK的关键函数:WinMain()、InitInstance()、WndProc()。 得顺着WndProc()的switch(message)才能看清各个函数功能是怎样的。 看代码还有重要的一点,就是看作者留下的注释。这对任何程序都很重要哦!

4、首先要理解他的业务流程吧,看看VC++项目的源程序的设计书,程序的流程图。

5、主要是看别人写的开发文档了,然后你要对程序里面的类有个大致的了解,尤其是类与类之间的调用关系,然后再细化,看具体的成员函数的实现等,呵呵~~ ,用UML来查看类图之间的关系,这样会方便很多~~~

6、不支持拿到手就直接DEBUG,应该从大的地方抓起,逐步细化,下面是一些建议: 了解项目的背景;了解项目的功能以及架构;可以执行的应该多执行几遍;观察它的流程;认真阅读各个头文件,从各个类及其接口函数猜测它的作用、结构、使用方法;把这些都理清后再细看代码,加上适当的DEBUG应该就可以驾御这个项目了。

7、多设置点断点,看看函数之间的调用关系吧。也就是流程,把流程搞清楚了 ,思路也就清楚了。

8、先了解功能,然后跟者消息走,比如一按纽的响应函数就跟踪过去,在看他调用什么,这样一步步来就可以 .还有查找很重要,比如某个函数被哪些模块调用了,查下最好。

9、在某个函数中设置好断点,F5,停下来后打开工具栏的Browse小条,借助其可以观察到当前函数堆栈、当前函数调用了那些函数、被那些函数调用。

10、如果没有文档,没有注释,但应该是有功能的,你先从主程序入口,一点点看。推荐工具Source Insight,可以帮助你在函数之间跳转。刚开始的确很难。日子长了就好了。我就专门看没有什么文档和注释的代码,抓bug,还要修改,看了一个月后就容易多了。 总之很多程序员的素养不够,只管写代码,没有软件工程意识,不写文档,不写注释,给软件维护和修改带来很大的困难。这样的软件开发不知道怎么可能成熟起来。

11、用RationalRose对工程文件作逆向工程,可以得到继承的层次和类的具体说明,而后根据层次和类的结构一步一步翻看

新手必看:如何快速看懂VC++项目的更多相关文章

  1. 新手必看】Highcharts的100个基础问答

    新手必看]Highcharts的100个基础问答 2014-12-2 10:59| 发布者: Mr.Zhang| 查看: 2749| 评论: 3|来自: Highcharts中文论坛   摘要: 1. ...

  2. 终于把你必须知道的.NET看完了

    终于把你必须知道的.NET看完了,第二步就是把精通ASP.NET MVC3框架这本书搞定,练习MVC3的使用,并把EF,LINQ也练习一下,期间要做一个项目“多用户微信公众平台”项目,最近微信公众平台 ...

  3. 使用CAD快速看图如何将图纸打印和预览?

    有相关CAD工作经验的小伙伴们都知道,绘制完CAD图纸后是需要借助CAD看图工具来进行查看图纸的,其实CAD快速看图中不仅能够对图纸进行查看,还能够将CAD图纸进行打印出来.但是有很多的伙伴不知道要怎 ...

  4. 从Surface 3发布 看微软快速转向的根由

    3发布 看微软快速转向的根由" title="从Surface 3发布 看微软快速转向的根由"> 平地一声惊雷起,微软突然送惊喜!在毫无征兆的情况下,微软突然发布一 ...

  5. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  6. 一泡尿的时间,快速读懂QUIC协议

    1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...

  7. 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议

    1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...

  8. python新手必躺的5大坑

    python新手必躺的5大坑 对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长.执行慢,这些都是需要改进的地方.本文是想通过几个案列给新手一点启发,怎样写python代 ...

  9. 作为Java新手,如何才能快速的看透一个Java项目?

    前言 技术学习是一个总结.纠错.触类旁通的过程,而不是单纯重复练习的过程,如果你问一个做过5年以上Java的老码农,他们很多人都会有很强的"搬砖感",这种"搬砖感&quo ...

随机推荐

  1. 1分钟快速生成用于网页内容提取的xslt

      1,项目背景   在<Python即时网络爬虫项目说明>一文我们说过要做一个通用的网络爬虫,而且能节省程序员大半的时间,而焦点问题就是提取器使用的抓取规则需要快速生成.在python使 ...

  2. Python 在Windows下安装matplotlib

    windows下安装很麻烦,使用easy_install 安装报错  提示缺少freetype 和png 后经多方查询,最终安装成功 以下是安装过程 前提你的Python环境已经搭建好了 1.前提需要 ...

  3. SemaphoreFullException when checking user role via ASP.NET membership

    将指定的计数添加到该信号量中会导致其超过最大计数 This issue was fixed by restarting ASP.NET Development Server on windows ta ...

  4. 一步一步学python(三) - 使用字符串

    1.基本字符串操作 序列和元组的索引.分片.乘法.判断成员资格.求长度.取最小值和最大值对字符串同样适用. 字符串是不可变的 2.字符串格式化 %左侧放字符串右侧放格式化的值.一般情况下使用元组 fo ...

  5. mobile端

    1.技术解决方案--------->(widget/event/ajax)->function->data------>XMLHttpRequest----->Serve ...

  6. delphi 把多个线程的请求阻塞到另一个线程 TElegantThread

    本例是把多个线程访问数据库的请求,全部阻塞到一个线程. 这是实际编程中常见的一种问题. 示例源码下载,所需支持单元均在源码中,且附详细说明. TElegantThread 的父类是 TSimpleTh ...

  7. 【hihocoder 1258 Osu! Master】

    2015北京区域赛现场赛签到题. 题面:http://media.hihocoder.com/contests/icpcbeijing2015/problems.pdf OJ链接:http://hih ...

  8. HDOJ-1003 Max Sum(最大连续子段 动态规划)

    http://acm.hdu.edu.cn/showproblem.php?pid=1003 给出一个包含n个数字的序列{a1,a2,..,ai,..,an},-1000<=ai<=100 ...

  9. Linux id 命令 - 显示用户id和组id信息

    要登入一台计算机,我们需要一个用户名.用户名是一个可以被计算机识别的身份.基于此,计算机会对使用这个用户名的登陆的人应用一系列的规则.在Linux系统下,我们可以使用 id 命令. 什么是 id 命令 ...

  10. linux使用FIO测试磁盘的iops

    FIO是测试IOPS的非常好的工具,用来对硬件进行压力测试和验证,支持13种不同的I/O引擎,包括:sync,mmap, libaio, posixaio, SG v3, splice, null, ...