Добавить вызов к log()
в начале каждого метода. В log()
либо создайте исключение (для Java 1.4), либо используйте Thread.currentThread().getStackTrace()
для получения трассировки стека.
Это даст вам массив StackTraceElement
. Элемент, который вы ищете, находится по индексу 1 (здесь был вызван log()
). Используйте getMethodName()
, чтобы получить имя метода. После этого вы можете использовать рефлексию для изучения метода.
К сожалению, это не дает вам доступа к реальному стеку Java, поэтому вы не можете распечатать значения параметров. Одним из решений было бы просто скопировать их в вызов журнала и использовать отражение в методе, чтобы выяснить, что они из себя представляют. В Java 5 списки аргументов переменных (log(Object...args)
) - ваш друг.
Другой вариант - использовать API Java Debugger и написать небольшой отладчик. В этом случае RemoteStackFrame
будет содержать параметры и значения.
Если это слишком много, просто используйте десять строк АОП и покончите с этим.