how to debug code in arduino IDE

#define DEBUG_PRINT(...)   Serial.print(F(#__VA_ARGS__" = ")); Serial.print (__VA_ARGS__);Serial.print(F(" ")) 
#define DEBUG_PRINTLN(...) DEBUG_PRINT(__VA_ARGS__); Serial.println()

Could someone please explain how this VA_ARGS thing works?

Also this thread is very very useful for all users and therefore should /could it be made sticky?