vs2008bin下Debug bll Release文件 obj下的Debug bll Release文件区别
Bin目录用来存放编译的结果,bin是二进制binrary的英文缩写,因为最初C编译的程序文件都是二进制文件,它有Debug和Release两个版本,分别对应的文件夹为bin/Debug和bin/Release,这个文件夹是默认的输出路径,我们可以通过:项目属性—>配置属性—>输出路径来修改。
obj是object的缩写,用于存放编译过程中生成的中间临时文件。其中都有debug和release(中文的意思:释放)两个子目录,分
别对应调试版本和发行版本,在.NET中,编译是分模块进行的,编译整个完成后会合并为一个.DLL或.EXE保存到bin目录下。
因为每次编译时默认都是采用增量编译,即只重新编译改变了的模块,obj保存每个模块的编译结果,用来加快编译速度。是
否采用增量编译,可以通过:项目属性—>配置属性—>高级—>增量编译来设置。
PRoperties文件夹定义你程序集的属性 项目属性文件夹 一般只有一个 AssemblyInfo.cs类文件,用于保存程序集的信息,如名
称,版本等,这些信息一般与项目属性面板中的数据对应,不需要手动编写。
经常你会遇到DEBUG成功的版本RELEASE 就有问题,以下是问题的分析总结
DEBUG和RELEASE 版本差异及调试相关问题:
. 内存分配问题
1. 变量未初始化。下面的程序在debug中运行的很好。
thing * search(thing * something)
BOOL found;
for(int i = 0; i < whatever.GetSize(); i++)
{
if(whatever[i]->field == something->field)
{ /* found it */
found = TRUE;
break;
} /* found it */
}
if(found)
return whatever[i];
else
return NULL;
而在release中却不行,因为debug中会自动给变量初始化found=FALSE,而在release版中则不会。所以尽可能的给变量、类或结构初始化。
2. 数据溢出的问题
如:char buffer[10];
int counter;
lstrcpy(buffer, "abcdefghik");
在debug版中buffer的NULL覆盖了counter的高位,但是除非counter>16M,什么问题也没有。但是在release版中,counter可能被放在寄存器中,这样NULL就覆盖了buffer下面的空间,可能就是函数的返回地址,这将导致ACCESS ERROR。
3. DEBUG版和RELEASE版的内存分配方式是不同的 。
如果你在DEBUG版中申请 ele 为 6*sizeof(DWORD)=24bytes,实际上分配给你的是32bytes(debug版以32bytes为单位分配), 而在release版,分配给你的就是24bytes(release版以8bytes为单位),所以在debug版中如果你写ele[6],可能不会有什么问题,而在release版中,就有ACCESS VIOLATE。
最新文章
- java怎么导入一个项目到eclipse
- php 月初,月末时间大统计
- AngularJS中bootstrap启动
- WEB前端工程师面试题【前端】
- linux专题一之文件管理(目录结构、创建、查看、删除、移动)
- 2014年4月份第1周51Aspx源码发布详情
- [转载]两个半小时学会Perl
- 《CMake实践》第三部分的示例代码的错误
- Android EditText属性
- Innobackupex 全备数据库
- Spring Cloud Config
- 【YouVersion】 The Bible 圣经App
- AngularJS html5Mode与ASP.NET MVC路由
- ligerUI实现分页
- 使用PhotoShop
- Apache shiro的简单介绍与使用(与spring整合使用)
- 简单介绍python的双向队列
- 入学java的第一天
- MySQL 5.6的一个bug引发的故障
- rsync简介与rsync+inotify配置实时同步数据