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. ecshop物料库存管理

    1.创建物流库存表.sql语句: CREATE TABLE IF NOT EXISTS `emws_materials` (`id` mediumint(8) unsigned NOT NULL au ...

  2. oracle全文检索笔记

    1.删除词法解析器 exec ctx_ddl.drop_preference('my_lexer'); 2.创建中文词法解析器 exec ctx_ddl.create_preference ('my_ ...

  3. QtWaitingSpinner

    https://github.com/snowwlex/QtWaitingSpinner

  4. Delphi调用安装驱动sys的单元

    unit SysDriver; interface uses windows, winsvc; // jwawinsvc; Type TSysDriver = class(TObject) priva ...

  5. QT:使用“状态模式”绘制界面

    QT与很多GUI库不同(如MFC),它不能随时随地地在界面上画图,只能在界面类的painterEvent中画图,如此一来,想在绘制QT界面时使用状态模式(GOF的23种设计模式之一)就有点困难了,作为 ...

  6. C++14介绍

    C++14标准是 ISO/IEC 14882:2014 Information technology -- Programming languages -- C++ 的简称[1]  .在标准正式通过之 ...

  7. _declspec(dllexport)与_declspec(dllimport)

    __declspec(dllexport)2009-03-04 17:25 我相信写WIN32程序的人,做过DLL,都会很清楚__declspec(dllexport)的作用,它就是为了省掉在DEF文 ...

  8. (转载博文)MFC 窗口句柄获取

    句柄获取方法(获取该窗口的句柄后,即可向该窗口类类发送消息.处理程序):0.获取所在类窗口的句柄: this->m_hwnd 1.主窗口的句柄: 无论在主窗口类内,还是子窗口类内,获取主窗口句柄 ...

  9. Web scraping with Python (part II) « Jean, aka Sig(gg)

    Web scraping with Python (part II) « Jean, aka Sig(gg) Web scraping with Python (part II)

  10. OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的!

    OpenGLES 怎样在十天内掌握线性代数 - 希望这是真的! 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致&q ...