20. A computing system for debugging code programmed in an interpreted language defining a plurality of expressions, comprising: a memory; a computer processor; a parser stored in the memory and configured, when executed by the computer processor, to create a parse tree for an indicated function; a debug command module stored in the memory and configured, when executed by the computer processor, to receive debugging commands from a user via a visual user interface and, when a command is received to set or change a breakpoint in the indicated function, generating a logical breakpoint address that indicates a nearest enclosing expression contained within the function, including when the nearest enclosing expression begins on a line of source code associated with the indicated function that is different from a line of the associated source code that contains the indicated breakpoint; a debug handler stored in the memory and configured, when executed by the computer processor, to receive the generated logical breakpoint address, resolve the logical breakpoint address into a memory address that corresponds to a location in the parse tree created for the function, record information to associate the breakpoint with the function; and an evaluation module for the interpreted language stored in the memory and configured, when executed by the computer processor, to receive an expression in the interpreted language that contains a call to the function, and traverse a parse tree corresponding to the received expression to generate output defined by evaluating the expression such that, when the location that corresponds to the breakpoint associated with the function is encountered in the parse tree created for the function, the evaluation module pauses to receive debug commands to further control evaluation of the expression or to examine values of objects associated with the expression.
20. A computing system for debugging code programmed in an interpreted language defining a plurality of expressions, comprising: a memory; a computer processor; a parser stored in the memory and configured, when executed by the computer processor, to create a parse tree for an indicated function; a debug command module stored in the memory and configured, when executed by the computer processor, to receive debugging commands from a user via a visual user interface and, when a command is received to set or change a breakpoint in the indicated function, generating a logical breakpoint address that indicates a nearest enclosing expression contained within the function, including when the nearest enclosing expression begins on a line of source code associated with the indicated function that is different from a line of the associated source code that contains the indicated breakpoint; a debug handler stored in the memory and configured, when executed by the computer processor, to receive the generated logical breakpoint address, resolve the logical breakpoint address into a memory address that corresponds to a location in the parse tree created for the function, record information to associate the breakpoint with the function; and an evaluation module for the interpreted language stored in the memory and configured, when executed by the computer processor, to receive an expression in the interpreted language that contains a call to the function, and traverse a parse tree corresponding to the received expression to generate output defined by evaluating the expression such that, when the location that corresponds to the breakpoint associated with the function is encountered in the parse tree created for the function, the evaluation module pauses to receive debug commands to further control evaluation of the expression or to examine values of objects associated with the expression. 23. The computing system of claim 20 wherein the evaluation module is modified to examine each node in a parse tree when the node is traversed to determine whether a breakpoint has been set.