Idea about trace and debug class in C#

I want to know about trace class and debug class. Both things are similar to me. WriteIf or WriteLineIf can be done with a simple if statement. Asserting is also confusing. It seems like it could be done by just stepping through the code using breakpoints and the debugger to watch local and auto variables. Can anyone briefly explain how these things work? Thanks in advance.
