为了账号安全,请及时绑定邮箱和手机立即绑定

.NET中的调试与发布

/ 猿问

.NET中的调试与发布

幕布斯6054654 2019-11-15 13:14:37

继续我的上一个问题,是否有详尽的文档列出了C#应用程序(尤其是Web应用程序)中调试和发布模式之间的所有可用差异?


有什么区别?


查看完整描述

3 回答

?
HUX布斯

“调试”和“发布”仅是Visual Studio定义的预定义项目配置的名称。
若要查看差异,请在Visual Studio的“项目属性”中查看“生成”选项卡。

VS2005中的差异包括:

  • 在调试配置中定义的DEBUG常数

  • 优化在发布配置中启用的代码

以及通过单击“高级”按钮可以看到的其他差异

但是你可以:

  • 在项目属性/构建中更改调试和发布配置的构建设置

  • 通过在解决方案资源管理器中右键单击解决方案并选择配置管理器来创建自己的自定义配置

我认为DEBUG常量的行为非常清楚(可以在#if预处理程序指令或ConditionalAttribute中引用)。但是我不知道有关启用了哪些优化的任何全面文档-实际上,我怀疑Microsoft会希望自由地增强其优化器,而不另行通知


查看完整回答
反对 回复 2019-11-15
?
慕前端131612

没有一个文件列出了差异。除了已经列出的一些差异之外,在调试模式下进行编译还会关闭在运行时执行的大多数JIT编译器优化,并且还会在符号数据库文件(.pdb)中发出更完整的调试信息。

另一个很大的不同是,GC行为有所不同,因为JIT编译器将根据需要/需要插入对GC.KeepAlive()的调用,以支持调试会话。


查看完整回答
反对 回复 2019-11-15
?
梵蒂冈之花

调试和发布只是不同解决方案配置的标签。您可以根据需要添加其他人。如果您愿意,可以从配置管理器添加更多配置–


http://msdn.microsoft.com/zh-CN/library/kwybya3w.aspx


主要差异–


1.在调试dll中,添加了一些额外的说明,使您可以在Visual Studio中的每个源代码行上设置断点。同样,代码也不会被优化,从而使您能够调试代码。在发行版本中,这些额外的说明已删除。


2.PDB文件仅在调试模式下创建,而不在相对模式下创建。


3.在发布模式下,cpde由JIT编译器内置的优化器进行优化。它进行了以下优化:


•方法内联-方法调用由注入方法的代码代替。


•CPU寄存器分配-本地变量和方法参数可以保持存储在CPU寄存器中,而无需(或不经常)存储回到堆栈帧


•消除数组索引检查-使用数组时的一项重要优化(所有.NET集合类在内部使用数组)。当JIT编译器可以验证循环是否永不对数组进行索引时,它将消除索引检查。


•   Loop unrolling -  Short loops (up to 4) with small bodies are eliminated by repeating the code in the loop body. 


•   Dead code elimination - A statement like if (false) { /.../ } gets completely eliminated. 


•   Code hoisting- Code inside a loop that is not affected by the loop can be moved out of the loop.


•   Common sub-expression elimination. x = y + 4; z = y + 4; becomes z = x


查看完整回答
反对 回复 2019-11-15

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信