A method and apparatus for debugging software for the purpose of
modification of the target program's behavior and/or collection of data
pertinent to a target program's execution. New user actions are compiled
and converted into a dynamically linkable module. The existing program is
run under the control of a dynamic action linker. The dynamic action
linker modifies the existing program by inserting the new actions in the
memory image. The insertion is accomplished by automatically recognizing
and modifying object code sequences in the existing program to call the
new actions. Once the modification phase has finished modifying the
existing program's memory image the new program is run without additional
interruption, the new actions acting as if they were present in the
original source code for the program.