dsm vs drupal_set_message vs debug vs dpm vs watchdog for developing dsm requires the devel module but I guess you have that installed anyway if your developing modules.
debug and 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 )

dsm and 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?
If devel is available, i use mostly dpm. If not, I use drupal_set_message(print_r($array, true)). This helps me in the most cases. If both are not available or visible, I use the Watchdog.