One or more computer-readable storage media having executable instructions which, when executed by a computer, cause the computer to perform a method comprising: receiving, in a first process in an environment, a notification that a debug event has arisen in a second process in which a debuggee program is being run in a first instance of a loop, wherein a debug event can be an exception raised by the debuggee program that stops the debuggee program; upon occurrence of an exception raised by the debuggee program that stops the debuggee program, using, by said first process, a first debug primitive to create, in said second process, a second instance of said loop to continue execution of the debuggee program from said second instance of said loop, said first debug primitive being provided by a debug infrastructure of said environment, the debug infrastructure supporting debugging by an out-of-process debugger, an out-of-process debugger being a debugger that acts on the debuggee program from outside of the second process in which the debuggee program is run; receiving, in said first process, from said second process, a request to perform at least one of the following actions: (a) communicating information about a symbol defined in said second process, and (b) performing at least one flow-control action in said debuggee program, said request having arisen in said second process by a user entering a debug command into said second instance of said loop; using the debug infrastructure to perform an action specified in said request; and displaying at least one of: (a) a value associated with said symbol, and (b) a result of said debuggee program resulting from said at least one flow-control action. receiving, in a first process in an environment, a notification that a debug event has arisen in a second process in which a debuggee program is being run in a first instance of a loop, wherein a debug event can be an exception raised by the debuggee program that stops the debuggee program; upon occurrence of an exception raised by the debuggee program that stops the debuggee program, using, by said first process, a first debug primitive to create, in said second process, a second instance of said loop to continue execution of the debuggee program from said second instance of said loop, said first debug primitive being provided by a debug infrastructure of said environment, the debug infrastructure supporting debugging by an out-of-process debugger, an out-of-process debugger being a debugger that acts on the debuggee program from outside of the second process in which the debuggee program is run; receiving, in said first process, from said second process, a request to perform at least one of the following actions: (a) communicating information about a symbol defined in said second process, and (b) performing at least one flow-control action in said debuggee program, said request having arisen in said second process by a user entering a debug command into said second instance of said loop; using the debug infrastructure to perform an action specified in said request; and displaying at least one of: (a) a value associated with said symbol, and (b) a result of said debuggee program resulting from said at least one flow-control action.