1. A method for execution by one or more processors, the method comprising: receiving executable code having a plurality of subroutines, a subroutine of the executable code having optimized object code as a first version and having debuggable object code as a second version, the first version and the second version being distinct, the optimized object code and the debuggable object code being generated by a compiler; and when debugging the executable code, upon determining that the subroutine is to be debugged, causing the debuggable object code of the subroutine to be executed wherein the optimized object code is not executed and wherein causing the debuggable object code to be executed comprises inserting an instruction in the optimized object code that causes control to be transferred to the debuqqable object code; and when the subroutine is not to be debugged, causing the optimized object code to be executed wherein the debuqqable object code is not executed.