首页 > 学院 > 开发设计 > 正文

.NET中Debug模式与Release模式

2019-11-14 16:50:54
字体:
来源:转载
供稿:网友

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

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

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

 Debug


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

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

 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.VEVb.com/Interkey/p/3554588.html

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

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


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

RemovePdb

  重要事项: 调试器只会为二进制文件加载与该二进制文件生成之时所创建的 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位系统的


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表