我很好奇 .NET 编译器的 debug 和 release 模式之间的区别是什么,并且遇到了这些关于debug 与 .NET中的 release以及release 行为与 debug 不同的原因的问题。到目前为止,我还没有过多关注这些编译器模式。现在我会的。
我的问题是,假设我使用的是测试框架(NUnit)和 TDD,如果我总是在发布模式下编译会遇到任何问题吗?
我很好奇 .NET 编译器的 debug 和 release 模式之间的区别是什么,并且遇到了这些关于debug 与 .NET中的 release以及release 行为与 debug 不同的原因的问题。到目前为止,我还没有过多关注这些编译器模式。现在我会的。
我的问题是,假设我使用的是测试框架(NUnit)和 TDD,如果我总是在发布模式下编译会遇到任何问题吗?
您正在使用 TDD。你写你的测试。测试失败。您编写代码以通过测试。代码失败。您查看您编写的代码,看不出它失败的任何明显原因。您是否要进行更多推理或在调试器中启动测试(使用 TestDriven.Net)并逐步完成测试?也许我只是不够聪明,无法总是弄清楚为什么我的代码不起作用,但当我被难住时,我通常会做后者。
调试模式关闭了很多优化。这意味着当您获得堆栈跟踪时,它看起来更像原始代码。
调试和发布配置之间的一个非常显着的区别是,对标记为的方法的调用ConditionalAttribute
只有在定义了关联的符号时才会被编译。Debug
因此,如果您使用发布配置进行编译,则不会包含对类方法的调用。
这使您可以使用断言和将信息转储到控制台的代码来装饰您的代码,并且确信这些开销都不会出现在您的运输代码中。
此外,edit-and-continue 是一个非常有用的工具,它依赖于发布版本中省略的元信息。
用于调试。
就像 tvanfosson 所说,即使您通常不使用调试器(我知道我不使用),有时您也需要。