There comes a time in every application's life where it will need to be debugged. A non-distributed application is usually easy to debug since you can simply execute it in a debugger. Once in the debugger, you can perform various actions that the debugger provides, such as breakpoints or stepping through code.
When dealing with distributed systems, since some of the systems are remote from one another, debugging can be a bit more challenging. One option is to make use of remote debugging. This involves installing debugging components on computers so that the system can be debugged remotely. Once configured, remote debugging is generally the same as local debugging. Remote debugging is fine for sandboxed and test environments, but is generally frowned upon in production or acceptance environments. Installing components other than those that are required to run the system is often denied.
Even when you can debug remotely, there may be so many processes in play that you cannot debug...