Partager via


Notes on Debug mode versus Release Mode

 

Dlls compiled in debug mode should stay in the developmental environment while they're being debugged, improved, stepped-through, and tweaked.

When the dll is ready to be deployed (released) to a high-traffic server—such as a SharePoint TEST, QA, or Production Farm—the dll should be recompiled in release mode.

When in debug mode. . .

  1. Expect the memory footprint of the process to be enlarged since debug symbols are required to be loaded.
  2. Expect a substantial performance hit due to the debug and trace statements (System.Diagnostics.DebuggableAttribute) in the output IL code. In debug mode there are several extra instructions added to enable you to set a breakpoint on every source code line a debugger such as Visual Studio.
  3. Also the code will not be optimized by the compiler. JIT optimizations will be disabled. (IsJitOptimizerEnabled)

In release mode. . .

  1. all calls to Debug class methods in your code are disabled.
  2. Code is optimized during the build operation
  3. You cannot take advantage of any source-code level debugging tools. You cannot set breakpoints.
  4. Better performance
  5. Smaller memory footprint

Comments

  • Anonymous
    June 04, 2014
    Actually you can use breakpoints in Release. And you should have debug symbols for Release too.
  • Anonymous
    June 04, 2014
    @Lucian - symbols can be generated in release for debugging, but why would you want them to be? By that point your code should be tested (code/integration/regression) and any logging you require to trace bugs should be done separately. Past a staging environment you shouldn't be debugging production code, depending on your project (for example MVC - using a remote debugger and putting break points in controllers)  you could be affecting all traffic to your site, not just your requests. On large deployed systems this would be a big no (can't see Facebook doing that). If your needing to debug live code its probably highlighting mistakes in the rest of your release process.
  • Anonymous
    June 04, 2014
    The comment has been removed
  • Anonymous
    June 04, 2014
    Totally agree with @Dzejms and @Lucian, production symbols may save your life, especially if you have to dump your process for examination inside WinDbg.
  • Anonymous
    June 05, 2014
    Great discussion.  Thanks for the comments!