新手必看:如何快速看懂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 查看表定义的 4 种方法
方法 1. show create table table_name;可以用这个看表的代码. show create table Strings; 方法 2. show full columns fr ...
- nginx upload module的使用
现在的网站,总会有一点与用户交互的功能,例如允许用户上传头像,上传照片,上传附件这类的.PHP写的程序,对于上传文件效率不是很高.幸好,nginx有一个名为upload的module可以解决这个问题. ...
- tomcat优化-有改protocol 和 缓存 集群方案
tomcat优化 在线上环境中我们是采用了tomcat作为Web服务器,它的处理性能直接关系到用户体验,在平时的工作和学习中,归纳出以下七种调优经验. 1. 服务器资源 服务器所能提供CPU.内存.硬 ...
- cf459A Pashmak and Garden
A. Pashmak and Garden time limit per test 1 second memory limit per test 256 megabytes input standar ...
- 顶尖数据挖掘教学案例库(TipDM-C10)产品白皮书
顶尖数据挖掘教学案例库 (TipDM-C10) 产 品 说 明 书 广州泰迪智能科技有限公司 版权所有 地址: 广州市经济技术开发区科学城232号 网址: ht ...
- getgrent
http://baike.baidu.com/link?url=JNyoNvukL-LP7ayYlNNWLv2gPOzn-bjiwuX1CE_QwUTyrRGCWu4NhDW-JznHQoG4aIfw ...
- nyoj 1237 最大岛屿(dfs)
描述 神秘的海洋,惊险的探险之路,打捞海底宝藏,激烈的海战,海盗劫富等等.加勒比海盗,你知道吧?杰克船长驾驶着自己的的战船黑珍珠1号要征服各个海岛的海盜,最后成为海盗王. 这是一个由海洋.岛屿和海盗组 ...
- Redmine backlogs 安装
之前我们一直用IceScrum的免费版本来运作Scrum项目,用GitLab来做做Issue管理,但是出现了一些问题.GitLab的issue不够好用,不能满足我们的需求,同时issue没有办法放在S ...
- C++求二叉树的最大高度差
#include <iostream> #include <string.h> using namespace std; template<typename Type&g ...
- Apache Thrift入门(安装、测试与java程序编写)
安装Apache Thrift ubuntu linux运行: #!/bin/bash #下载 wget http://mirrors.cnnic.cn/apache/thrift/0.9.1/thr ...