class MultiTracer extends AITracer
A tracer that forwards every call to all registered tracers.
- Source
- MultiTracer.scala
- Alphabetic
- By Inheritance
- MultiTracer
- AITracer
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def abruptMethodExecution(domain: Domain)(pc: Int, exception: Domain.ExceptionValue): Unit
Called when the analyzed method throws an exception that is not caught within the method.
Called when the analyzed method throws an exception that is not caught within the method. I.e., the interpreter evaluates an
athrow
instruction or some other instruction that throws an exception.- Definition Classes
- MultiTracer → AITracer
- def abruptSubroutineTermination(domain: Domain)(details: String, sourcePC: Int, targetPC: Int, jumpToSubroutineId: Int, terminatedSubroutinesCount: Int, forceScheduling: Boolean, oldWorklist: List[Int], newWorklist: List[Int]): Unit
Called when the evaluation of a subroutine terminated abruptly due to an unhandled exception.
Called when the evaluation of a subroutine terminated abruptly due to an unhandled exception.
- jumpToSubroutineId
The subroutine that will be continued. The id is the pc of the first instruction of the subroutine. It is 0 if it is the method as such.
- terminatedSubroutinesCount
The number of subroutines that are terminated.
- Definition Classes
- MultiTracer → AITracer
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- def continuingInterpretation(code: Code, domain: Domain)(initialWorkList: List[Int], alreadyEvaluatedPCs: IntArrayStack, operandsArray: Domain.OperandsArray, localsArray: Domain.LocalsArray, memoryLayoutBeforeSubroutineCall: List[(Int, Domain.OperandsArray, Domain.LocalsArray)]): Unit
Called immediately before the abstract interpretation of the specified code is performed.
Called immediately before the abstract interpretation of the specified code is performed.
If the tracer changes the
operandsArray
and/orlocalsArray
, it is the responsibility of the tracer to ensure that the data structures are still valid afterwards.- Definition Classes
- MultiTracer → AITracer
- def deadLocalVariable(domain: Domain)(pc: Int, lvIndex: Int): Unit
Called by the interpret when a local variable with the given index (
lvIndex
) was set to a new value and, therefore, the reference stored in the local variable previously was useless/dead.Called by the interpret when a local variable with the given index (
lvIndex
) was set to a new value and, therefore, the reference stored in the local variable previously was useless/dead.- Definition Classes
- MultiTracer → AITracer
- def domainMessage(domain: Domain, source: Class[_], typeID: String, pc: Option[Int], message: => String): Unit
Called by the domain if something noteworthy was determined.
Called by the domain if something noteworthy was determined.
- domain
The domain.
- source
The class (typically the (partial) domain) that generated the message.
- typeID
A
String
that identifies the message. This value must not benull
, but it can be the empty string.- message
The message; a non-null
String
that is formatted for the console.
- Definition Classes
- MultiTracer → AITracer
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def establishedConstraint(domain: Domain)(pc: Int, effectivePC: Int, operands: Domain.Operands, locals: Domain.Locals, newOperands: Domain.Operands, newLocals: Domain.Locals): Unit
Called by the framework if a constraint is established.
Called by the framework if a constraint is established. Constraints are generally established whenever a conditional jump is performed and the evaluation of the condition wasn't definitive. In this case a constraint will be established for each branch. In general the constraint will be applied before the join of the stack and locals with the successor instruction is done.
- Definition Classes
- MultiTracer → AITracer
- def flow(domain: Domain)(currentPC: Int, targetPC: Int, isExceptionalControlFlow: Boolean): Unit
Called by the interpreter after an instruction (
currentPC
) was evaluated and before the instruction with the program countertargetPC
may be evaluated.Called by the interpreter after an instruction (
currentPC
) was evaluated and before the instruction with the program countertargetPC
may be evaluated.This method is only called if the instruction with the program counter
targetPC
will be evaluated in the future and was not yet scheduled. I.e., when the abstract interpreter determines that the evaluation of an instruction does not change the abstract state (associated with the successor instruction) and, therefore, will not schedule the successor instruction this method is not called.In case of
if
orswitch
instructionsflow
may be called multiple times (even with the same targetPC) before the methodinstructionEvaluation
is called again.- Definition Classes
- MultiTracer → AITracer
- Note
OPAL performs a depth-first exploration. However, subroutines are always first finished analyzing before an exception handler - that handles abrupt executions of the subroutine - is evaluated.
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def initialLocals(domain: Domain)(locals: Domain.Locals): Unit
The set of initial locals computed when the method is interpreted for the first time.
The set of initial locals computed when the method is interpreted for the first time.
- Definition Classes
- MultiTracer → AITracer
- def instructionEvalution(domain: Domain)(pc: Int, instruction: Instruction, operands: Domain.Operands, locals: Domain.Locals): Unit
Called before an instruction is evaluated.
Called before an instruction is evaluated.
This enables the tracer to precisely log the behavior of the abstract interpreter, but also enables the tracer to interrupt the evaluation to, e.g., enable stepping through a program.
- operands
The operand stack before the execution of the instruction.
- locals
The registers before the execution of the instruction.
- Definition Classes
- MultiTracer → AITracer
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def join(domain: Domain)(pc: Int, thisOperands: Domain.Operands, thisLocals: Domain.Locals, otherOperands: Domain.Operands, otherLocals: Domain.Locals, result: Update[(Domain.Operands, Domain.Locals)]): Unit
Called by the abstract interpreter whenever two paths converge and the values on the operand stack and the registers are joined.
Called by the abstract interpreter whenever two paths converge and the values on the operand stack and the registers are joined.
- thisOperands
The operand stack as it was used the last time when the instruction with the given program counter was evaluated.
- thisLocals
The registers as they were used the last time when the instruction with the given program counter was evaluated.
- otherOperands
The current operand stack when we re-reach the instruction
- otherLocals
The current registers.
- result
The result of joining the operand stacks and register assignment.
- Definition Classes
- MultiTracer → AITracer
- def jumpToSubroutine(domain: Domain)(pc: Int, target: Int, nestingLevel: Int): Unit
Called before a jump to a subroutine.
Called before a jump to a subroutine.
- Definition Classes
- MultiTracer → AITracer
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def noFlow(domain: Domain)(currentPC: Int, targetPC: Int): Unit
Called by the interpreter if a successor instruction is NOT scheduled, because the abstract state didn't change.
Called by the interpreter if a successor instruction is NOT scheduled, because the abstract state didn't change.
- Definition Classes
- MultiTracer → AITracer
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- def rescheduled(domain: Domain)(sourcePC: Int, targetPC: Int, isExceptionalControlFlow: Boolean, worklist: List[Int]): Unit
Called if the instruction with the
targetPC
was already scheduled.Called if the instruction with the
targetPC
was already scheduled. I.e., the instruction was already scheduled for evaluation, but is now moved to the first position in the list of all instructions to be executed (related to the specific subroutine). A rescheduled event is also issued if the instruction was the the first in the list of instructions executed next. However, further instructions may be appended to the list before the nextinstructionEvaluation
takes place.- Definition Classes
- MultiTracer → AITracer
- Note
OPAL performs a depth-first exploration.
- def result(result: AIResult): Unit
Called when the abstract interpretation of a method has completed/was interrupted.
Called when the abstract interpretation of a method has completed/was interrupted.
- Definition Classes
- MultiTracer → AITracer
- def ret(domain: Domain)(pc: Int, returnAddressPC: Int, oldWorklist: List[Int], newWorklist: List[Int]): Unit
Called when a
RET
instruction is encountered.Called when a
RET
instruction is encountered. (That does not necessary imply that the evaluation of the subroutine as such has finished. It is possible that other paths still need to be pursued.)- Definition Classes
- MultiTracer → AITracer
- def returnFromSubroutine(domain: Domain)(pc: Int, returnAddress: Int, subroutinePCs: List[Int]): Unit
Called when the evaluation of a subroutine (JSR/RET) as a whole is completed.
Called when the evaluation of a subroutine (JSR/RET) as a whole is completed. I.e., all possible paths are analyzed and the fixpoint is reached.
- Definition Classes
- MultiTracer → AITracer
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- val tracers: AITracer*
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated