BTrace, похоже, выбирает более безопасный путь, не внедряя себя в загрузочный класс. загрузчик по умолчанию. Однако из документации (последней) мне неясно, как это сделать. Скрипт btracer принимает аргумент -bcp
, но не совсем понятно, что ему следует предоставить. У BTrace есть несколько jar-файлов агентов, и я предполагаю, что в этом случае мне нужно использовать btrace-boot.jar, но кажется, что он по-прежнему не может ничего инструментировать в java.lang.
Скрипт:
Код: Выделить всё
import org.openjdk.btrace.core.types.AnyType;
import org.openjdk.btrace.core.annotations.BTrace;
import org.openjdk.btrace.core.annotations.OnMethod;
import org.openjdk.btrace.core.annotations.ProbeClassName;
import org.openjdk.btrace.core.annotations.ProbeMethodName;
import static org.openjdk.btrace.core.BTraceUtils.printArray;
import static org.openjdk.btrace.core.BTraceUtils.println;
import static org.openjdk.btrace.core.BTraceUtils.print;
@BTrace
public class StrArgArray {
@OnMethod(
clazz = "java.lang.String",
method = "contains"
)
public static void anyCo(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) {
print(pcn);
print(pmn);
printArray(args);
}
}
Код: Выделить всё
import java.lang.String;
public class yay
{
public static void main(String[] args)
{
String s1 = "asdf";
System.out.println(s1.contains("sd"));
};
}
Код: Выделить всё
btracer -v -bcp /full/path/to/btrace-boot.jar StrArgArray.class yay
Подробнее здесь: https://stackoverflow.com/questions/786 ... ith-btrace