2014-02-05 2 views
1

Я пытаюсь получить некоторую информацию о времени выполнения, чтобы выполнить некоторую отладку. Есть ли способ получить доступ к параметрам, фактически переданным методу?Как получить значения параметров вызываемого метода в java?

Я знаю вызывающий класс и метод, но не параметры и их значение во время выполнения. Любые идеи, как это решить? Заранее спасибо.

Мой код до сих пор:

//get the class I wanna know something about out of the call history 
StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace(); 
String callerMethod = stacktrace[2].getMethodName(); 

//load the class to get the information 
Class<?> c = Class.forName(stacktrace[2].getClassName()); 
Method[] methods = c.getMethods(); 
Class<?>[] parameters = methods[1].getParameterTypes(); 

//get the parameter data 
(parameters[y].isArray()? parameters[y].getComponentType() : parameters[y]).getName(); 

//TODO: how about the parameter value at runtime? 

Код должен быть общим для всех классов я реализую. Пример использования:

public class doClass() { 
    public void doSomething(Object o) { 
    //here comes my debug line 
    magicDebugger(level); 
    } 
} 

level является переключатель/триггер, чтобы активировать консоль/дб/файл/выход почты или что-то некоторой информации

Я ожидаю, что следующий вывод (может быть, есть некоторые System.out.println в класс magicDebugger):

[debug] caller: com.company.package.doClass.doSomething(Object o); value of o at runtime = java.lang.String "test" 
+2

вы можете использовать аспекты, чтобы справиться с этим или отладки коды в ecllipse как редактор – Tenacious

+0

Он должен быть с помощью консоли отладки. Я не могу использовать eclipse для этого. – Ben

ответ

1

вы можете использовать http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Proxy.html класс Proxy или рамки AspectJ, чтобы сделать это

+0

Я попытался закодировать прокси-сервер, и этот шаблон работает нормально. Хотя я по-прежнему hestitate, чтобы изменить все строки кода у меня есть;) – Ben

1

Посмотрите на использование отражения для этого. Это должно обеспечить то, что вы ищете.

+2

Не нашел ничего, кроме имен. Мне нужна ценность. – Ben

+0

Извините, тогда вы захотите посмотреть на прокси или AOP для этого, как это было предложено другими. – Thom

Смежные вопросы