dsm requires the devel module but I guess you have that installed anyway if your developing modules.
watchdog having the advantage that is writes to the log file.
I can see the advantage of
watchdog on a live site so users don't get bugged by messages while debugging the site. but is harder to use ( you have to write more code )
dpm are short and simple to use but don't always show output.
So are I think
debug is the best way to go while developing modules (on your test server). But apparently it doesn't handle array's that well.
Which one do you use and why do you think that is the best / better or should I use the different functions for different purposes?