Как инструментировать Java-код для сбора данных о распределении переменных с помощью byte Buddy или ASMJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как инструментировать Java-код для сбора данных о распределении переменных с помощью byte Buddy или ASM

Сообщение Anonymous »

как мне следует инструментировать свой код, чтобы получать данные о распределении переменных во время выполнения программы?
рассмотрим, например, этот код:

Код: Выделить всё

public class Test2 {
public boolean isSerialKeyValid(String serial) {
if (!serial.toLowerCase().startsWith("@v3")) {
return isV1V2SerialValid(serial);
}
return isV3SerialValid(serial);
}

private boolean isV1V2SerialValid(String serial) {
if (serial.toLowerCase().startsWith("@v1")) {
String serialValue = serial.split("@v1")[1];
return isV1ChecksumValid(serialValue);
}
String serialValue = serial.split("@v2")[1];
return isV2ChecksumValid(serialValue);
}

private boolean isV1ChecksumValid(String v1Serial) {
if (!v1Serial.matches("\\d+")) {
return false;
}
String[] items = v1Serial.split("\\d");
int sum = 0;
for (String item : items) {
sum += Integer.parseInt(item);
}
return sum % 13 == 0;
}

private boolean isV2ChecksumValid(String v2Serial) {
String trimmedSerial = v2Serial.trim();
if (trimmedSerial.length() != 8) {
return false;
}
return trimmedSerial.matches("[^A-Za-z]+\\w{3}[^A-Za-z]+");
}

private boolean isV3SerialValid(String v3Serial) {
String serialValue = v3Serial.split("@v3")[1];
return isV3ChecksumValid(serialValue);
}

private boolean isV3ChecksumValid(String v3Serial) {
return v3Serial.length() == 10 && v3Serial.matches(".*@!=.*");
}
}

public class SampleTestSuit {
public static void main(String[] args) {
System.out.println(validatedSerialKey("@v2123ali34"));
}

public static boolean validatedSerialKey (String str) {
if (str.startsWith("@v1") || str.startsWith("@v2") || str.startsWith("@v1")) {
Test2 test2 = new Test2();
return test2.isSerialKeyValid(str);
}
return false;
}
}
Когда запускается основной метод, я хочу, чтобы значения записей передавались функциям. Для приведенного выше примера приведен пример вывода, который мне хотелось бы получить:

Код: Выделить всё

{
methodName: TestSuit2.Test2#isSerialKeyValid,
parametersValue:[
{
paramName: serial,
paramValue: "@v2123ali34"
}
]
},
{
methodName: TestSuit2.Test2#isV1V2SerialValid,
parametersValue:[
{
paramName: serial,
paramValue: "@v2123ali34"
}
]
},
{
methodName: Java.Lang.String#toLowerCase,
parametersValue:[
{
paramName: ?,
paramValue: "@v2123ali34"
}
],
},
Я также использовал инструмент распределения Google. Но эта библиотека не может получить имена переменных и их значения во время выполнения (или я не нашел ресурса для этой цели)
Должен ли я использовать такую ​​библиотеку, как byte Buddy или ASM? Моя целевая версия JDK — 8.
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/782 ... byte-buddy
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»