For beginners Visual Studio Express is not bad. As you start to move further into the language and start developing more advanced programs it can be a pain.

One example is multi-threaded programs. From what I read and experienced with the limitation on breakpoints I am at the mercy of VS to break at the right moment. So if I have several objects running in their own threads and one of them is breaking I need to step through and hope I catch the right thread because there is no real way to break inside a particular thread.