首页 > 其他分享 >.NET中Debug模式与Release模式

.NET中Debug模式与Release模式

时间:2023-04-19 15:11:25浏览次数:36  
标签:编译 模式 Release 调试信息 版本 Debug 调试

 

一、Debug和Release的区别
Debug:调试版本,包含调试信息,所以容量比Release大很多,并且不进行任何优化(优化会使调试复杂化,因为源代码和生成的指令间关系会更复杂),便于程序员调试。Debug模式下生成两个文件,除了.exe或.dll文件外,还有一个.pdb文件,该文件记录了代码中断点等调试信息
  Release:发布版本,不对源代码进行调试,编译时对应用程序的速度进行优化,使得程序在代码大小和运行速度上都是最优的。(调试信息可在单独的PDB文件中生成)。Release模式下生成一个文件.exe或.dll文件

二、Obj文件夹的作用
  obj目录中也有debug和release两个子目录,obj目录是项目生成dll的源目录,然后将生成好的dll复制到bin目录下。obj用于存放编译过程中生成的中间临时文件。在.Net中,编译时分模块进行的,每个模块的编译结果都保存在obj目录下,最后会合并为一个.exe或则.dll文件保存到bin目录下。
  因为每次编译都是增量编译,也就是只重新编译改变了的模块,所以这个obj目录的作用就是保存这些小块的编译结果,加快编译速度。

三、Debug 和 Release 编译方式的本质区别
Debug 通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release 称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。
Debug 和 Release 的真正秘密,在于一组编译选项。下面列出了分别针对二者的选项(当然除此之外还有其他一些,如/Fd /Fo,但区别并不重要,通常他们也不会引起 Release 版错误,在此不讨论)

Debug 版本:
/MDd /MLd 或 /MTd 使用 Debug runtime library(调试版本的运行时刻函数库)
/Od 关闭优化开关
/D "_DEBUG" 相当于 #define _DEBUG,打开编译调试代码开关(主要针对assert函数)
/ZI 创建 Edit and continue(编辑继续)数据库,这样在调试过程中如果修改了源代码不需重新编译
/GZ 可以帮助捕获内存错误
/Gm 打开最小化重链接开关,减少链接时间
Release 版本:
/MD /ML 或 /MT 使用发布版本的运行时刻函数库
/O1 或 /O2 优化开关,使程序最小或最快
/D "NDEBUG" 关闭条件编译调试代码开关(即不编译assert函数)
/GF 合并重复的字符串,并将字符串常量放到只读内存,防止被修改

实际上,Debug 和 Release 并没有本质的界限,他们只是一组编译选项的集合,编译
器只是按照预定的选项行动。事实上,我们甚至可以修改这些选项,从而得到优化过的调
试版本或是带跟踪语句的发布版本。

 

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

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

标签:编译,模式,Release,调试信息,版本,Debug,调试
From: https://www.cnblogs.com/qingjiawen/p/17333341.html

相关文章

  • Vmware 安装 Linux系统 设置 静态IP 桥接模式 无法连接网络?可能是没设置好
    可能是你没有设置好连接step.1step.2这里需要选择你电脑硬件的网卡,选其他的没用。......
  • 设计模式-模板模式在Java中的使用示例-悍马模型制造示例
    场景设计模式-模板模式在Java中的使用示例:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130230732上面整理了模板模式的使用示例,为加强理解特记录另一个使用示例,以下示例摘自设计模式之禅第二版。模板方法模式定义一个操作中的算法的框架,而将一些步骤延迟到......
  • 迪普防火墙主备模式
    迪普防火墙的主备模式,提供了二种双机热备、一种vrrp双机方案:1、普通双机热备:互为备份的两台设备只同步部分配置信息,不能同步会话信息。(使用较少)2、静默双机热备:主备设备同步配置和会话信息。此方案中,主设备处于工作状态,正常处理业务流量;备设备处于静默状态,业务接口不处理任何报......
  • 重学Java设计模式-行为型模式-迭代器模式
    重学Java设计模式-行为型模式-迭代器模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-23-重学Java设计模式《实战迭代器模式》.html#重学-java-设计模式-实战迭代器模式「模拟公司组织架构树结构关系-深度迭代遍历人员信息输出场景」迭代器模式介绍图......
  • 重学Java设计模式-行为型模式-命令模式
    重学Java设计模式-行为型模式-命令模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-21-重学Java设计模式《实战命令模式》.html#重学-java-设计模式-实战命令模式「模拟高档餐厅八大菜系-小二点单厨师烹饪场景」命令模式介绍图片来自:https://refactori......
  • 6.自定义注解与设计模式
    自定义注解与设计模式课程目标熟悉注解底层实现原理完成ORM框架底层原理常用设计模式单例、工厂、代理一.自定义注解1.1什么是注解?Jdk1.5新增新技术,注解。很多框架为了简化代码,都会提供有些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在......
  • IaaS模式、SaaS模式和PaaS模式,分别在物联网中的应用
    众所周知,云计算分为三层架构:第一、软件服务(SaaS);第二、平台服务(PaaS);第三、架构服务(IaaS)。物联网与云计算结合存在多种模式。实际上,PaaS模式、SaaS模式也可以与物联网很好地结合起来。此外,从智能分布的角度还应该看到,“边缘计算”也是物联网应用智能处理模式的一种典型特征。......
  • Java-Day-12( 类变量 + 类方法 + main 方法 + 代码块 + 单例设计模式 + final 关键字 )
    Java-Day-12类变量定义一个变量count,是一个类变量(静态变量)staticclassPerson{privateStringname;// 该静态变量static最大的特点就是会被Person所有的对象实例共享publicstaticintcount=0;publicPerson(Stringname){this.na......
  • Linux 虚拟机服务器安装 Redis (sentinel模式)
    虚拟机服务器准备阶段三台服Linux虚拟机IP分别为192.168.192.133(作为master节点)192.168.192.129(作为slave节点)192.168.192.132(作为slave节点)我的三台虚拟机服务器版本均为centos7,且均为最小化安装,所以少很多软件,比如安装redis时需要gcc编译器、python环境等。......
  • 真实机u盘安装CentOS进入dracut模式解决办法
    真实机u盘安装CentOS进入dracut模式解决办法1.问题描述  昨天在真实机器(Dell笔记本)通过U盘安装 CentOS72003 操作系统时,无法正确引导,而是进入 dracut 模式,特此记录。2.解决方法  在dracut模式下,运行" ls-al/dev|grepsd "dracut#ls-al/dev|grepsd ......