1. A method of collaborative software debugging in a distributed system, the distributed system comprising a debug server, a plurality of debug clients, and a data communications network, the debug server coupled for data communications to the plurality of debug clients through the data communications network, the debug server comprising a debug administrator, a message router, a back-end debugger, and a debuggee, the method comprising: receiving, by the debug server from the debug clients asynchronously during a debug session of the debuggee, a plurality of application-level messages, including receiving, from a requesting debug client, a request to establish a dynamic breakpoint at location in source code of the debuggee, the dynamic breakpoint enabled when the requesting debug client requests to execute the debuggee and disabled when other debug clients request to execute the debuggee; routing, by the message router in accordance with an application-level message passing protocol, the application-level messages among the debug clients, the debug administrator, and the back-end debugger, including providing distributed control of the back-end debugger to the debug clients with application-level messages routed to the back-end debugger, sending to the back-end debugger a command to establish the dynamic breakpoint at the location in source code of the debuggee, and sending to the debug administrator an instruction to register the dynamic breakpoint; establishing, by the back-end debugger, the dynamic breakpoint at the location in source code; registering, by the debug administrator in a dynamic breakpoint register, the requesting debug client's dynamic breakpoint; and returning, by the debug server to the debug clients in response to the application-level messages routed to the back-end debugger, client-specific debug results.