From 571b700fb6bdb90eed59d16705ef4ae2fb69a9d3 Mon Sep 17 00:00:00 2001 From: Andreas Gampe Date: Tue, 16 Jan 2018 15:11:29 -0800 Subject: [PATCH] Debug: Add attachJvmtiAgent with classloader Add classloader support to android.os.Debug.attachJvmtiAgent. For the original version without a given classloader, look up the application's main classloader. Bug: 65016018 Bug: 70901841 Test: m Test: cts-tradefed run commandAndExit cts-dev Change-Id: I649b6883e05dc2f75073fe1f978423f6a7b880df --- api/current.txt | 2 +- core/java/android/os/Debug.java | 24 +++++++++++++++--------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/api/current.txt b/api/current.txt index 40452b7636631..abdccf3767891 100644 --- a/api/current.txt +++ b/api/current.txt @@ -31036,7 +31036,7 @@ package android.os { } public final class Debug { - method public static void attachJvmtiAgent(java.lang.String, java.lang.String) throws java.io.IOException; + method public static void attachJvmtiAgent(java.lang.String, java.lang.String, java.lang.ClassLoader) throws java.io.IOException; method public static deprecated void changeDebugPort(int); method public static void dumpHprofData(java.lang.String) throws java.io.IOException; method public static boolean dumpService(java.lang.String, java.io.FileDescriptor, java.lang.String[]); diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java index 2acf36fed85f2..c3894c4869368 100644 --- a/core/java/android/os/Debug.java +++ b/core/java/android/os/Debug.java @@ -1136,7 +1136,7 @@ public final class Debug int intervalUs) { VMDebug.startMethodTracing(fixTracePath(tracePath), bufferSize, 0, true, intervalUs); } - + /** * Formats name of trace log file for method tracing. */ @@ -2352,22 +2352,28 @@ public final class Debug } /** - * Attach a library as a jvmti agent to the current runtime. + * Attach a library as a jvmti agent to the current runtime, with the given classloader + * determining the library search path. + *

+ * Note: agents may only be attached to debuggable apps. Otherwise, this function will + * throw a SecurityException. * - * @param library library containing the agent - * @param options options passed to the agent + * @param library the library containing the agent. + * @param options the options passed to the agent. + * @param classLoader the classloader determining the library search path. * - * @throws IOException If the agent could not be attached + * @throws IOException if the agent could not be attached. + * @throws SecurityException if the app is not debuggable. */ - public static void attachJvmtiAgent(@NonNull String library, @Nullable String options) - throws IOException { + public static void attachJvmtiAgent(@NonNull String library, @Nullable String options, + @Nullable ClassLoader classLoader) throws IOException { Preconditions.checkNotNull(library); Preconditions.checkArgument(!library.contains("=")); if (options == null) { - VMDebug.attachAgent(library); + VMDebug.attachAgent(library, classLoader); } else { - VMDebug.attachAgent(library + "=" + options); + VMDebug.attachAgent(library + "=" + options, classLoader); } } }