title: What's the difference between System.Diagnostics.Trace, System.Diagnostics.Debug and System.Console?
body: <p>As far as I understand, <code>System.Console</code> will write to STDOUT by default, but what about <code>System.Diagnostics.Trace</code> and <code>System.Diagnostics.Debug</code>? What are the default behaviors, and are they configurable in any way?</p>
  
  <p>It also seems that different people use different things (on the internet), but I'm assuming that most of what I've found is wrong, since there should be specific semantics for each of these, right? And if so, are there any frameworks (like ASP.NET or WPF) that make special use of these?</p>
  
  <p>Also one last question, what are the rules of thumb for picking which one of these to use?</p>