Methods and an apparatus for instrumenting object oriented software that
do not require modification to existing source code or to executable files, nor
do they require modification to any existing sequences of object resident instructions.
Methods include the class interceptor, doppelganger and method hijacking software
instrumentation techniques. The class interceptor technique intercepts and monitors
the paths of execution associated with methods inherited by a target class. The
class doppelganger technique intercepts and monitors the paths of execution entering
a target class. The method hijacking technique creates and adds instrumented methods
directly to a target class.