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