Visual Studio 项目对程序的发布和调试版本分别有单独的配置。顾名思义,生成调试版本的目的是用于调试,而生成发布版本的目的是用于版本的最终分发。
  如果在 Visual Studio 中创建程序,Visual Studio 将自动创建这些配置并设置适当的默认选项和其他设置。在默认设置下:

  • 程序的“调试”配置用全部符号调试信息编译,不进行优化。(优化会使调试复杂化,因为源代码和生成的指令间的关系更加复杂。)
  • 程序的“发布”配置被完全优化,不包含任何符号调试信息。调试信息可在单独的 PDB 文件中生成。

  当在程序集的属性页中选Debug模式时,配置如下:


本文地址:http://www.cnblogs.com/Interkey/p/3554588.html

  当选择Release模式时,配置如下:

  两者的不同点如下:

项目 Debug Release
条件编译常数 Debug;Trace Trace
优化代码 False True
输出路径 bin\Debug bin\Release
生成调试信息 True False

Debug模式下生成的程序集为调试版本,未经优化;在bin\debug\目录中有两个文件,除了要生成的.exe或.dll文件外,还有个.pdb文件,这个.pdb文件中就记录了代码中的断点等调试信息;

Release模式下不包含调试信息,并对代码进行了优化,\bin\release\目录下只有一个.exe或.dll文件。

  注意: 若要更改项目的生成模式,不能只从项目属性页上点“配置”下拉框更改,那样不起作用,必须点右上角的“配置管理器”按钮才能更改。

另外,在项目文件夹下除了bin外,还有个obj目录,由于编译是分模块编译的,每个模块的编译结果就保存在了obj目录下。最后会合并为一个exe或者dll文件保存到bin之中。因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以这个obj的目录的作用就是保存这些小块的编译结果,加快编译速度。

以上内容整理自:VS.Net中程序集的Debug版本和Release版本的区别.

更多可参考:判断dll是debug还是release,这是个问题


然后就是关于pdb文件:
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。 在使用 /debug 生成时,会创建一个 PDB 文件。 可以使用 /debug:full 或 /debug:pdbonly 生成应用程序。 使用 /debug:full 生成将产生可调试的代码。 使用 /debug:pdbonly 生成将产生 PDB,但是不会产生通知 JIT 编译器调试信息可用的 DebuggableAttribute。 如果您想为不希望其成为可调试的发布版本生成 PDB,请使用 /debug:pdbonly。 有关更多信息,请参见 /debug (C# 编译器选项)或 /debug (Visual Basic)。

本文地址:http://www.cnblogs.com/Interkey/p/3554588.html

问:Debug里有pdb,Release里也有pdb,他们有什么不同呢?为什么很多人都不喜欢pdb,欲除之而后快?

答:Debug里的pdb是full,保存着调试和项目状态信息、有断言、堆栈检查等代码。Release 里的pdb是pdb-only,基本上:出什么错了+错误在哪行。

因为很多人把pdb理解成:调试文件、Program Debug Database、会泄露代码机密,所以想将其删除,那只要在VS的 项目-->生成-->高级-->调试信息-->None便可.

  重要事项: 调试器只会为二进制文件加载与该二进制文件生成之时所创建的 PDB 完全相符的 PDB。 就是说,该 PDB 必须是原 PDB 或其副本。 因为编译器在创建二进制文件时会考虑多种因素,所以,即使代码自身没有变化,二进制文件的实际布局也可能会有变化。

以上内容整理自:.net里Release的pdb文件有什么用

本文仅为个人需要而整理,内容层次不一,望自斟酌!

扩展Determining if a .NET Assembly is compiled debug or not

快速判断可通过.NET Reflector,参考区分.net dll编译时是Debug的还是Release的

如何知道dll文件是面向32位系统还是面向64位系统的

.NET中Debug模式与Release模式的更多相关文章

  1. .Net中的Debug模式和Release模式

    1.Debug模式和Release模式 在vs中,运行程序有两种模式:Debug和Release 在bin目录下也会生成对应的文件夹,用于存放生成的dll等文件,这两种模式的区别如下: Debug:用 ...

  2. 【C++】Debug模式和Release模式的区别

    VS中的程序有两种编译模式:Debug模式和Release模式. Debug通常称为调试版本,通过一系列编译选项的配合,编译结果通常包含调试信息,而且不做任何优化,以为开发人员提供强大的应用程序调试能 ...

  3. Xcode中使用debug模式和release模式

    在开发过程中,我们经常需要用到NSLog输出一些信息,甚至有的开发过程,必须在控制台查看输出,有经验的程序员通过控制台输出就能知道整个数据交互的一个流程.但是一个发布的程序,里面带有太多的NSLog输 ...

  4. VS中Debug模式和Release模式的区别

    一.Debug 和 Release 编译方式的本质区别 Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序.Release 称为发布版本,它往往是进行了各种优化,使得程 ...

  5. ffmpeg在Win7 VS2010中debug通过,release出错的问题解决方法

    我所用的系统环境是Win7 32位操作系统+VS2010编译环境.所以在debug模式下调通之后,在Release模式下调试不通过,最后通过上网查资料和自己对比两个编译选项得出以下结论: 修改“项目- ...

  6. 使用Xcode-debug模式和release模式

    在开发过程中,我们常常须要用到NSLog输出一些信息,甚至有的开发过程.必须在控制台查看输出,有经验的程序猿通过控制台输出就能知道整个数据交互的一个流程. 可是一个公布的程序,里面带有太多的NSLog ...

  7. 解决VS+opencv中Debug版本与Release版本lib切换的问题

    Author: Maddock Date: 2015-03-26 09:34:48 问题来源:http://bbs.csdn.net/topics/390733725 PS: 按照上述方法做的时候,在 ...

  8. .NET中Debug模式与Release模式差别

    Debug里的PDB是full,保存着调试和项目状态信息.有断言.堆栈检查等代码.Release 里的PDB是pdb-only,基本上:出什么错了+错误在哪行. 因为很多人把PDB理解成:调试文件.P ...

  9. Visual Studio中Debug和Release的区别

    在Visual Studio中,生成应用程序的时候有2种模式:Debug和Release.两者之间如何取舍呢? 假设有这么简单的一段代码,在主程序中调用方法M1,M1方法调用M2方法,M2方法调用M3 ...

随机推荐

  1. Java程序员转Android开发必读经验分享

    小编最近几日偷偷的发现部分Java程序员想转安卓开发,故此加紧补充知识,为大家搜集资料,积极整理前人的经验,希望可以给正处于困惑中的你,带来些许的帮助. 啰哩啰嗦的说说Java和Android程序的区 ...

  2. 【C#|.NET】从细节出发(三) 逻辑层事务和page object模式

    一. 业务逻辑层的事务问题 如果你的程序分层清晰并且系统禁用复杂存储过程,那么在DA中的职责比较单一.程序的逻辑通过BLL调用各种不同模块的DA来实现数据操作.如果当需要不同模块在一个事务的时候,问题 ...

  3. C# 代码转化为Java代码

    http://www.tangiblesoftwaresolutions.com/Free_Editions.html Install Instant C# (converts VB.NET code ...

  4. AX2012 R3升级CU8的一些错误

    AX2012 R3安装升级包CU8后进入系统,系统会提示打开软件升级清单“Software update checklist”,清单列出了升级要做的一系列动作. 在进行到编译应用时“Compile a ...

  5. 网友对twisted deferr的理解

    事實上Deferred的確就像是一連串的動作,用callback的形式被串在一起,我們用deferred或許可以這樣寫 d.addCallback(洗菜)d.addCallback(切菜)d.addC ...

  6. iOS开发- Xcode 7添加pch文件

    1.打开你的Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点 ...

  7. CLR via C#深解笔记三 - 基元类型、引用类型和值类型 | 类型和成员基础 | 常量和字段

    编程语言的基元类型   某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们. System.Int32 a = new System.Int32();  // a = 0 a = 1 ...

  8. 移动端前端框架UI库(Frozen UI、WeUI、SUI Mobile)

    Frozen UI 自述:简单易用,轻量快捷,为移动端服务的前端框架. 主页:http://frozenui.github.io/ 开发团队:QQVIP FD Team Github:https:// ...

  9. linux下批量查找/替换文本内容

    一般在本地电脑上批量替换文本有许多工具可以做到,比如sublime text ,但大多服务器上都是无图形界面的,为此收集了几条针对linux命令行 实现批量替换文本内容的命令: 1.批量查找某个目下文 ...

  10. linux下mysql字符集编码问题的修改

    安装完的MySQL的默认字符集为 latin1 ,为了要将其字符集改为用户所需要的(比如utf8),就必须改其相关的配置文件:由于linux下MySQL的默认安装目录分布在不同的文件下:不像windo ...