It seems that the System.Diagnostics.Debug and System.Diagnostics.Trace are largely the same, with the notable exception that Debug usage is compiled out in a release configuration. When would you use one and not the other? The only answer to this I've dug up so far is just that you use the Debug class to generate output that you only see in debug configuration, and Trace will remain in a release configuration, but that doesn't really answer the question in my head.
If you're going to instrument your code, why would you ever use Debug, since Trace can be turned off without a recompile?