Подключение существующего метода в Java

Я хочу подключить метод System.out.print в Java и иметь возможность читать/изменять переменные, используемые в методе, до того, как будет вызвана часть метода, который фактически добавляет строку к любому потоку вывода.

В С++ я бы просто объединил функцию или установил инструкцию int3, чтобы я мог обращаться к регистрам, но в java я понятия не имею, как выполнить что-то подобное.

Ответы

Ответ 1

Вы можете переписать байт-код методов и в процессе захватить/изменить локальные переменные. Это не тривиально. См. Некоторые примечания здесь.

Может, вам действительно нужен java-отладчик? Вы можете подключить отладчик к удаленному процессу, добавить точку останова и легко захватить/изменить локальные переменные с помощью eclipse.

Какова реальная проблема, которую вы пытаетесь решить?

Ответ 2

Посмотрите на ссылку .

Он тайно определяет статический анонимный класс, так что System.out указывает на что-то другое, и поэтому print и println будут проходить через этот объект.

Ответ 3

Вы можете переназначить System.out(и System.err) другому объекту, который делает то, что вы хотите с ним делать. Указанный объект обычно получает старое значение System.out, так что вывод может быть выполнен в конце.

Обычно это делается в main() и влияет на всю JVM.

Мы используем это для автоматической упаковки в 130 столбцов в очень своеобразной настройке, где более длинные строки усекаются.

Ответ 5

@Nowayz Некоторое время, прежде чем у меня тоже была такая же проблема со мной. После некоторого исследования я узнал о AOP. AOP i.e. AspectJ предоставляет возможность перехватывать API-интерфейсы java, применяя pointcut до, после, вокруг. Так что посмотрите на это. Вы можете передать мой вопрос в стек.it может вам помочь.