• .NET中Debug模式与Release模式


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

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

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

     Debug


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

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

     Release

      两者的不同点如下:

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

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

    Release模式下不包含调试信息,并对代码进行了优化,in elease目录下只有一个.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便可.

    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位系统的

  • 相关阅读:
    原生js 异步请求,responseXML解析
    asp.net中Page.ClientScript.RegisterStartupScript用法小结
    asp.net 在repeater控件中加按钮
    无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
    js 注册控件的onclick事件
    js控件设置只读属性和不可用属性
    js CheckBox只读
    js时间日期格式
    js正则判断日期
    UIPickerView的使用(三)
  • 原文地址:https://www.cnblogs.com/Interkey/p/3554588.html
Copyright © 2020-2023  润新知