1. A method comprising: receiving, by a computing device, source code for compiling into executable processor instructions; receiving an aspect, the aspect comprising an advice and a pointcut, the advice including bytecode for collecting execution information of the executable processor instructions at run time, the pointcut specifying a location in the executable processor instructions to insert advice executable code generated from the advice; receiving an advice switch, the advice switch including bytecode of a conditional statement associated with a parameter and specifying that the advice executable code is to be invoked only if a condition specified by the parameter is satisfied; generating the executable processor instructions by weaving the source code, the aspect, and the advice switch together, wherein the weaving includes looping recursively through bytecode of each routine in the source code, each loop comprising: receiving a bytecode pointer pointing to a beginning or an end of a routine in the source code; determining that a current execution point corresponding to the beginning of the routine or the end of the routine corresponds to a point of execution defined by the pointcut; in respond to the determining, appending the bytecode of the advice and the bytecode of the advice switch to the bytecode of the routine at the current execution point and translating the appended bytecode into machine executable code, wherein the bytecode of the advice switch is translated into advice-switching code, and the bytecode of the advice is translated into advice executable code, the advice-switching code operable to invoke the advice executable code upon determining, by the advice-switching code and at the run time, that the condition is satisfied; and storing the executable processor instructions in a non-transitory storage device.