public class ByteBuddyAgent extends Object
The Byte Buddy agent provides a JVM Instrumentation
in order to allow Byte Buddy the
redefinition of already loaded classes. An agent must normally be specified via the command line via the
javaagent
parameter. As an argument to this parameter, one must specify the location of this agent's jar
file such as for example in
java -javaagent:byte-buddy-agent.jar -jar app.jar
Note: The runtime installation of a Java agent is not possible on all JVMs. See the documentation for
install()
for details on JVMs that are supported out of the box.
Important: This class's name is known to the Byte Buddy main application and must not be altered.
Note: Byte Buddy does not execute code using an AccessController
. If a security manager
is present, the user of this class is responsible for assuring any required privileges.
Modifier and Type | Class and Description |
---|---|
protected static interface |
ByteBuddyAgent.AgentProvider
An agent provider is responsible for handling and providing the jar file of an agent that is being attached.
|
static interface |
ByteBuddyAgent.AttachmentProvider
An attachment provider is responsible for making the Java attachment API available.
|
protected static interface |
ByteBuddyAgent.AttachmentTypeEvaluator
An attachment evaluator is responsible for deciding if an agent can be attached from the current process.
|
static interface |
ByteBuddyAgent.ProcessProvider
A process provider is responsible for providing the process id of the current VM.
|
Modifier and Type | Field and Description |
---|---|
static String |
LATENT_RESOLVE
Indicates that the agent should not resolve it's own code location for a self-attachment.
|
Modifier and Type | Method and Description |
---|---|
static void |
attach(File agentJar,
ByteBuddyAgent.ProcessProvider processProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
ByteBuddyAgent.ProcessProvider processProvider,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
ByteBuddyAgent.ProcessProvider processProvider,
String argument)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
ByteBuddyAgent.ProcessProvider processProvider,
String argument,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
String processId)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
String processId,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
String processId,
String argument)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attach(File agentJar,
String processId,
String argument,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
ByteBuddyAgent.ProcessProvider processProvider)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
ByteBuddyAgent.ProcessProvider processProvider,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
ByteBuddyAgent.ProcessProvider processProvider,
String argument)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
ByteBuddyAgent.ProcessProvider processProvider,
String argument,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
String processId)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
String processId,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
String processId,
String argument)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static void |
attachNative(File agentLibrary,
String processId,
String argument,
ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process.
|
static Instrumentation |
getInstrumentation()
Looks up the
Instrumentation instance of an installed Byte Buddy agent. |
static Instrumentation |
install()
Installs an agent on the currently running Java virtual machine.
|
static Instrumentation |
install(ByteBuddyAgent.AttachmentProvider attachmentProvider)
Installs an agent on the currently running Java virtual machine using the supplied
attachment provider.
|
static Instrumentation |
install(ByteBuddyAgent.AttachmentProvider attachmentProvider,
ByteBuddyAgent.ProcessProvider processProvider)
Installs an agent on the currently running Java virtual machine using the supplied
attachment provider and process provider.
|
static Instrumentation |
install(ByteBuddyAgent.ProcessProvider processProvider)
Installs an agent on the Java virtual machine resolved by the process provider.
|
public static final String LATENT_RESOLVE
public static Instrumentation getInstrumentation()
Looks up the Instrumentation
instance of an installed Byte Buddy agent. Note that
this method implies reflective lookup and reflective invocation such that the returned value should be cached
rather than calling this method several times.
Note: This method throws an IllegalStateException
If the Byte Buddy agent is not
properly installed.
Instrumentation
instance which is provided by an installed
Byte Buddy agent.public static void attach(File agentJar, String processId)
Attaches the given agent Jar on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processId
- The target process id.public static void attach(File agentJar, String processId, String argument)
Attaches the given agent Jar on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processId
- The target process id.argument
- The argument to provide to the agent.public static void attach(File agentJar, String processId, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process. This operation blocks until the attachment is complete. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processId
- The target process id.attachmentProvider
- The attachment provider to use.public static void attach(File agentJar, String processId, String argument, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process. This operation blocks until the attachment is complete.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processId
- The target process id.argument
- The argument to provide to the agent.attachmentProvider
- The attachment provider to use.public static void attach(File agentJar, ByteBuddyAgent.ProcessProvider processProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processProvider
- A provider of the target process id.public static void attach(File agentJar, ByteBuddyAgent.ProcessProvider processProvider, String argument)
Attaches the given agent Jar on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processProvider
- A provider of the target process id.argument
- The argument to provide to the agent.public static void attach(File agentJar, ByteBuddyAgent.ProcessProvider processProvider, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process. This operation blocks until the attachment is complete. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processProvider
- A provider of the target process id.attachmentProvider
- The attachment provider to use.public static void attach(File agentJar, ByteBuddyAgent.ProcessProvider processProvider, String argument, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent Jar on the target process which must be a virtual machine process. This operation blocks until the attachment is complete.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentJar
- The agent jar file.processProvider
- A provider of the target process id.argument
- The argument to provide to the agent.attachmentProvider
- The attachment provider to use.public static void attachNative(File agentLibrary, String processId)
Attaches the given agent library on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent jar file.processId
- The target process id.public static void attachNative(File agentLibrary, String processId, String argument)
Attaches the given agent library on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processId
- The target process id.argument
- The argument to provide to the agent.public static void attachNative(File agentLibrary, String processId, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process. This operation blocks until the attachment is complete. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processId
- The target process id.attachmentProvider
- The attachment provider to use.public static void attachNative(File agentLibrary, String processId, String argument, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process. This operation blocks until the attachment is complete.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processId
- The target process id.argument
- The argument to provide to the agent.attachmentProvider
- The attachment provider to use.public static void attachNative(File agentLibrary, ByteBuddyAgent.ProcessProvider processProvider)
Attaches the given agent library on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processProvider
- A provider of the target process id.public static void attachNative(File agentLibrary, ByteBuddyAgent.ProcessProvider processProvider, String argument)
Attaches the given agent library on the target process which must be a virtual machine process. The default attachment provider
is used for applying the attachment. This operation blocks until the attachment is complete. If the current VM does not supply
any known form of attachment to a remote VM, an IllegalStateException
is thrown.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processProvider
- A provider of the target process id.argument
- The argument to provide to the agent.public static void attachNative(File agentLibrary, ByteBuddyAgent.ProcessProvider processProvider, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process. This operation blocks until the attachment is complete. The agent is not provided an argument.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processProvider
- A provider of the target process id.attachmentProvider
- The attachment provider to use.public static void attachNative(File agentLibrary, ByteBuddyAgent.ProcessProvider processProvider, String argument, ByteBuddyAgent.AttachmentProvider attachmentProvider)
Attaches the given agent library on the target process which must be a virtual machine process. This operation blocks until the attachment is complete.
Important: It is only possible to attach to processes that are executed by the same operating system user.
agentLibrary
- The agent library.processProvider
- A provider of the target process id.argument
- The argument to provide to the agent.attachmentProvider
- The attachment provider to use.public static Instrumentation install()
Installs an agent on the currently running Java virtual machine. Unfortunately, this does not always work. The runtime installation of a Java agent is supported for:
jdk.attach
module is
available to Byte Buddy which is typically only available for VMs shipped with a JDK.tools.jar
bundled with the VM which
is typically only available for JDK-versions of the JVM.
If an agent cannot be installed, an IllegalStateException
is thrown.
Important: This is a rather computation-heavy operation. Therefore, this operation is
not repeated after an agent was successfully installed for the first time. Instead, the previous
instrumentation instance is returned. However, invoking this method requires synchronization
such that subsequently to an installation, getInstrumentation()
should
be invoked instead.
public static Instrumentation install(ByteBuddyAgent.AttachmentProvider attachmentProvider)
Installs an agent on the currently running Java virtual machine using the supplied attachment provider.
If an agent cannot be installed, an IllegalStateException
is thrown.
Important: This is a rather computation-heavy operation. Therefore, this operation is
not repeated after an agent was successfully installed for the first time. Instead, the previous
instrumentation instance is returned. However, invoking this method requires synchronization
such that subsequently to an installation, getInstrumentation()
should
be invoked instead.
attachmentProvider
- The attachment provider to use for the installation.public static Instrumentation install(ByteBuddyAgent.ProcessProvider processProvider)
Installs an agent on the Java virtual machine resolved by the process provider. Unfortunately, this does not always work. The runtime installation of a Java agent is supported for:
jdk.attach
module is
available to Byte Buddy which is typically only available for VMs shipped with a JDK.tools.jar
bundled with the VM which
is typically only available for JDK-versions of the JVM.
If an agent cannot be installed, an IllegalStateException
is thrown.
processProvider
- The provider for the current JVM's process id.public static Instrumentation install(ByteBuddyAgent.AttachmentProvider attachmentProvider, ByteBuddyAgent.ProcessProvider processProvider)
Installs an agent on the currently running Java virtual machine using the supplied attachment provider and process provider.
If an agent cannot be installed, an IllegalStateException
is thrown.
attachmentProvider
- The attachment provider to use for the installation.processProvider
- The provider for the current JVM's process id.Copyright © 2014–2021. All rights reserved.