赞
踩
· 版本控制
· 为何使用版本控制
· 提供中央版本库
· 保留每个源文件的所有更改记录
· 提供为某些版本加上标签的机制,供以后提取已加标签的版本
· 容许代码从主生产线上建立分支
· 制作示范程序,补丁
· 常见版本控制系统
· SCCS,RCS,CVS,Subversion,Git,Perforce,NxN Alienbrain,ClearCase
· Subversion和TortoiseSVN
· 免费,适合小型个人和教育项目
· 文件版本、更新和提交
· 可在服务器里维护中央版本库
· 程序员在计算机取得副本,修改,提交
· 多人签出,分支及合并
· 多人签出
· 用户编辑某个文件时,其他人可修改文件
· 同一文件的多组改动,版本控制系统必须合并这些改动
· 2人同时修改同一函数时:三路合并
· 删除
· 并非完全消失,简单标记为“已删除”
· 微软Visual Studio
· 源文件、头文件及翻译单元
· 编译器翻译C++源文件至机器码
· 技术上源文件称为翻译单元
· C++编译器并不知悉头文件
· C++预处理器预先把每个#include语句替换为相对应头文件内容,然后再把翻译单元送交编译器
· 程序库、可执行文件及动态链接库
· 编译翻译单元后,输出的机器码储存在对象文件(.obj)(UNIX系统是.o)中
· 对象文件的机器码是:
· 可重定位的:未定义代码的内存地址
· 未链接的:未解决外部函数参考及翻译单元外定义的全局数据
· 对象文件可以集合成程序库(.lib)
· 链接器把对象文件和程序库链接成可执行文件
· 链接器的工作包括:
· 计算全部机器码的最终相对地址,即当程序执行时机器码在内存中的分布
· 确保正确解析每个翻译单元(对象文件)的所有外部函数参考和全局数据
· 动态链接库(.dll)
· 静态链接库和可执行文件的混合体
· 行为像库,包含函数,供不同可执行文件调用
· 操作系统能独立载入dll,dll可包含启动及终止代码
· 使用dll的可执行文件含有未完全连接的机器代码
· 存于dll的函数和数据参考维持未链接状态
· 运行可执行文件时,操作系统需解析所有未链接函数
· 系统找出合适的dll文件,若该dll文件不在内存中则要载入,之后修正一些内存地址
· 项目及解决方案
· 在Visual Studio,项目(project)是源文件的集合
· 编译项目会产生库,可执行文件或dll
· 生成配置
· 生成配置是解决方案内个别项目的预处理器、编译器和链接器的选项集合
· 程序员可设置任意数量的生产配置,在配置中设定不同的预处理器、编译器和链接器选项
· 常用生成选项:
· 预处理器设置
· 定义预处理宏 #include,#define
· 条件编译:“了解”目前是生成调试或发布模式
· 基于编译环境和目标平台加入“魔法”预处理宏
· 编译器设置
· 是否包含调试信息
· 是否展开内联函数
· 优化选项
· 链接器设置
· 控制输出文件类型(可执行文件,DLL)
· 指定链接的外部库到可执行文件,指定程序库的搜索路径
· 控制堆栈大小,程序载入内存时的首选基址,平台等
· 典型生成配置:
· 常见配置
· 调试(Debug):用作开发用途,非常慢,关上所有优化,禁用所有函数内联,包含完整的测试信息
· 发布(Release):做最终软件出版之用,接近最终产品的运行速度,仍保留调试信息,开启断言
· 制作(Production):为生成最终发行给消费者的游戏版本而设,最快最精干的生成模型,除去所有调试信息,关上所有断言,完全启动优化
· 当游戏的工具和游戏本身共用代码库时,加入“工具”配置,用以为工具条件编译共用代码,工具通常也分调试和发布版本
· 混合生成版本
· 混合生成版本是指其配置中,大部分翻译单元时发布模式,只有一小部分翻译单元为调试模式
· 基于文本的生成工具make
· 用户能以翻译单元为单位把某些翻译单元设置为调试模式
· 定义make变量$HYBIRD_SOURCES
· 编译所有翻译单元的调试及发布两个版本,将对象文件按版本输出到两个文件夹
· 设定最终链接规则,链接 $HYBIRD_SOURCES列举的对象文件调试版本及其他对象的发布版本
· Visual Studio
· 生成配置以项目为单位而不是以翻译单元为单位
· 若源代码已经组织成库,就可以在解决方案层面上设立“混合”生成配置
· 可挑选所需项目,为每个项目(库)选择采用调试还是发布版本
· 生成配置和可测试性
· 一些bug仍有可能只出现在某个配置中而不出现在其他配置中
· 每个配置都必须彻底测试
· 保持最少数量的生成配置,最有利于测试
· 项目配置教程
· 设定个别的生成配置或“所有配置”
· 常规属性页
· 输出目录:最终产品的目录
· 编译器/链接器最终输出可执行文件,库和DLL
· 中间目录:中间文件生成时输出的目录
· 应和最终产品放在不同目录
· 宏功能:宏名字用括号包围并前置美元符$便可使用
· 例 :$(TargetFilename) 表示项目生成的最终可执行文件,库或DLL文件名
· 调试属性页
· C/C++属性页
· 常规/附加的包含目录
· 读取#include时搜寻的目录,最好使用相对路径
· 常规/调试信息格式
· 控制是否产生信息格式;调试及发布配置都包含调试信息
· 预处理器/预处理器定义
· 链接器属性页
· 常规/输出文件
· 设置最终产品的文件名,所在目录
· 常规/附加库目录
· 链接时读取库或对象文件,就会搜寻此属性列出的目录
· 输入/附加依赖项
· 列出需要和可执行文件或DLL链接的外部库
· 创建新的.vcproj文件
· 使用向导
· 复制现有项目
· 项目创建的可执行文件,库或DLL的文件名是明确地在.vcproj里指定的
· 可使用文本编辑器修改.vcproj文件
· 调试代码
· 断点,单步执行代码,调用堆栈,监视窗口,数据断点,调试断点
· 剖析工具
· 量度代码运行的时间,找出需要优化的代码
· 统计式剖析器:通过采样计算函数占整体执行时间的近似百分比,对性能影响小
· 测控式剖析器:提供最精确最详尽的计时数据,不能实时运行程序
· 内存泄漏和损坏检测工具
· 其他工具
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。