1. A method, comprising: starting execution of an application, including loading and executing a portion of code of the application, wherein the application is written in a platform-independent programming language supporting a plurality of programming constructs; subsequent to loading the portion of code and while the application is executing: receiving an instrumentation request comprising an identification of a probe point of the loaded portion of code at which instrumentation code is to be inserted; inserting the instrumentation code at the probe point while the application is being executed within a first virtual machine process and the portion of code is loaded, wherein the instrumentation code is verified to meet one or more of the following acceptance criteria: (a) that the instrumentation code does not modify a state of the application, or (b) that the instrumentation code does not include an instance of a programming construct from a set of prohibited programming constructs; and obtaining information indicative of an application state from an execution of the instrumentation code when the probe point is reached during application execution.