新手必看:如何快速看懂VC++项目
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++项目的更多相关文章
- 新手必看】Highcharts的100个基础问答
新手必看]Highcharts的100个基础问答 2014-12-2 10:59| 发布者: Mr.Zhang| 查看: 2749| 评论: 3|来自: Highcharts中文论坛 摘要: 1. ...
- 终于把你必须知道的.NET看完了
终于把你必须知道的.NET看完了,第二步就是把精通ASP.NET MVC3框架这本书搞定,练习MVC3的使用,并把EF,LINQ也练习一下,期间要做一个项目“多用户微信公众平台”项目,最近微信公众平台 ...
- 使用CAD快速看图如何将图纸打印和预览?
有相关CAD工作经验的小伙伴们都知道,绘制完CAD图纸后是需要借助CAD看图工具来进行查看图纸的,其实CAD快速看图中不仅能够对图纸进行查看,还能够将CAD图纸进行打印出来.但是有很多的伙伴不知道要怎 ...
- 从Surface 3发布 看微软快速转向的根由
3发布 看微软快速转向的根由" title="从Surface 3发布 看微软快速转向的根由"> 平地一声惊雷起,微软突然送惊喜!在毫无征兆的情况下,微软突然发布一 ...
- 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?
本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言 Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...
- 一泡尿的时间,快速读懂QUIC协议
1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...
- 网络编程懒人入门(十):一泡尿的时间,快速读懂QUIC协议
1.TCP协议到底怎么了? 现时的互联网应用中,Web平台(准确地说是基于HTTP及其延伸协议的客户端/服务器应用)的数据传输都基于 TCP 协议. 但TCP 协议在创建连接之前需要进行三次握手(如下 ...
- python新手必躺的5大坑
python新手必躺的5大坑 对于Python新手来说,写代码很少考虑代码的效率和简洁性,因此容易造成代码冗长.执行慢,这些都是需要改进的地方.本文是想通过几个案列给新手一点启发,怎样写python代 ...
- 作为Java新手,如何才能快速的看透一个Java项目?
前言 技术学习是一个总结.纠错.触类旁通的过程,而不是单纯重复练习的过程,如果你问一个做过5年以上Java的老码农,他们很多人都会有很强的"搬砖感",这种"搬砖感&quo ...
随机推荐
- MYSQL 表分区的 3 方法
背景知识: 表分区是把逻辑上同一范围的数据保存到同一个文件中,就和超市一样,把同类商品放在同一个区域,把不同的商品放在不同的地方.不同的是超市中 是根据用途分类的,表分区是根据它的取值区间来分的. 分 ...
- tomcat优化-有改protocol 和 缓存 集群方案
tomcat优化 在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验. 1. 服务器资源 服务器所能提供CPU.内存.硬 ...
- [置顶] access函数-linux
表头文件 #include<unistd.h> 定义函数 int access(const char * pathname, int mode); 函数说明 检查是否可以读/写某一已存在的 ...
- hdu4331 Image Recognition 就暴力啊。。啊。。
题意: 给一个1和0组成的正方形矩阵,求 四条边都由1构成的正方形的个数. 方法: 先统计矩阵中每一点,向四个方向,最多有多少个连续的1,这里用dp做也 与此同时,顺便求下 能向右下和 左上 两个方向 ...
- MinGW安装教程
首先说明一下 1) MinGw只是其中一种GCC编译环境的安装程序,还有像Cygwin也是差不多的; 2) 由于安装的时候有些地方忘了截图,所以图有些是借鉴别人的; 3) 还要就是安装MinGw,最好 ...
- RTNETLINK answers: Operation not permitted
如果出现:RTNETLINK answers: Operation not permitted,那是因为没有权限. 解决办法:su,输入root密码.
- Android Studio Build选项的功能
再开发过程中出现了如下错误: 无论如何clean,或者删除项目中build文件夹,Rebuild Project还是报错. 解决方案:Make Project 后出现有代码报错.修复代码问题,运行项目 ...
- 附加导航(Affix)行为
用法 通过 data 属性:如需向元素添加附加导航(Affix)行为,只需要向需要监听的元素添加 data-spy="affix" 即可.请使用偏移来定义何时切换元素的锁定和移动. ...
- MVC 传参
介绍一些View中常用的东西 1:传递参数: 1):路由协议中传递参数: 1):eg:比如是这样类似的路由协议,那么我们在传递参数的时候,就要传递 id过去,当然如果,ABCD= UrlParamet ...
- SQL Server插入中文数据后出现乱码
今天在做项目的过程中遇到如标题的问题,情况如下图: 数据库使用的是SQL Server2012版本,创建表的脚本如下: CREATE TABLE [dbo].[Type]( [TypeId] INT ...