1. A method using a computer for automatically instrumenting a computer program for dynamic debugging, such a computer program comprising source code written in a programming language for executing instructions on said computer, said programming language having a grammar comprising operations having an operator and at least one operand and a set of rules for relating said operations to said at least one operand, comprising the steps of: providing said source code as a sequence of statements in a storage device to said computer, each such statement representing a desired instruction expressed in said programming language as one or more operations with at least one operand each; separating each such statement into tokens representing either said operator or said at least one operand; building a parse tree according to said set of rules using said tokens, said parse tree being a directed acyclic graph and comprising a plurality of nodes connected by paths organized into a hierarchy of parent nodes representing operators connected using said paths to children nodes representing operands of said operators; providing additional nodes to said computer for instrumenting the computer program comprising instrumentation operations required to communicate runtime conditions to an error-checking engine, said additional nodes comprising a further plurality of nodes connected by paths organized into a hierarchy of parent nodes representing instrumentation operators connected using said paths to children nodes representing instrumentation operands of said instrumentation operators; instrumenting said computer program by augmenting said parse tree with said additional nodes to create an instrumented parse tree for indicating that an error condition occurred in said computer program during execution using said instrumentation operations; and generating object code from said instrumented parse tree and storing said object code in the storage device for later execution using the error-checking engine that indicates error conditions in said computer program.
1. A method using a computer for automatically instrumenting a computer program for dynamic debugging, such a computer program comprising source code written in a programming language for executing instructions on said computer, said programming language having a grammar comprising operations having an operator and at least one operand and a set of rules for relating said operations to said at least one operand, comprising the steps of: providing said source code as a sequence of statements in a storage device to said computer, each such statement representing a desired instruction expressed in said programming language as one or more operations with at least one operand each; separating each such statement into tokens representing either said operator or said at least one operand; building a parse tree according to said set of rules using said tokens, said parse tree being a directed acyclic graph and comprising a plurality of nodes connected by paths organized into a hierarchy of parent nodes representing operators connected using said paths to children nodes representing operands of said operators; providing additional nodes to said computer for instrumenting the computer program comprising instrumentation operations required to communicate runtime conditions to an error-checking engine, said additional nodes comprising a further plurality of nodes connected by paths organized into a hierarchy of parent nodes representing instrumentation operators connected using said paths to children nodes representing instrumentation operands of said instrumentation operators; instrumenting said computer program by augmenting said parse tree with said additional nodes to create an instrumented parse tree for indicating that an error condition occurred in said computer program during execution using said instrumentation operations; and generating object code from said instrumented parse tree and storing said object code in the storage device for later execution using the error-checking engine that indicates error conditions in said computer program. 11. A method according to claim 1, wherein said error condition comprises an inappropriate use of a pointer memory variable, said instrumenting step further comprising the steps performing a flow analysis on said source code to identify a declaration operation for a pointer memory variable comprising an identifier operand for identifying said pointer memory variable, said declaration operation having a corresponding node in said parse tree; inserting said additional nodes into said parse tree after said declaration operation node corresponding to such instrumentation operation for storing a pointer record for said pointer memory variable identified by said identifier operand and containing a value field for a memory address; performing a flow analysis on said source code to identify an operation using said pointer memory variable, said operation having a corresponding node in said parse tree; inserting said additional nodes into said parse tree before said operation node corresponding to such an instrumentation operation for indicating whether said operation is attempting to use said pointer memory variable when said value field is equal to said null; inserting said additional nodes into said parse tree before said operation node corresponding to such an instrumentation operation for indicating whether said operation is attempting to use said pointer memory variable when said value field is uninitialized; inserting said additional nodes into said parse tree before said operation node corresponding to such an instrumentation operation for indicating whether said operation is attempting to use a memory address contained in said value field that does not point to valid data; inserting said additional nodes into said parse tree before said operation node corresponding to such an instrumentation operation for indicating whether said operation is attempting to compare or relate a plurality of pointer memory variables not pointing to identical types of data; and inserting said additional nodes into said parse tree before said operation node corresponding to such an instrumentation operation for indicating whether said operation is attempting to make a function call using a pointer memory variable not containing a valid function address.