出于调试目的,我需要跟踪Class
属性更改。
例如,请考虑以下类:
class Test {
int myInt;
String myString;
...
public void setMyInt(int a) ...
public void setMyString(String s) ...
public printDebugLog();
}
void main() {
Test t = new Test();
t.setMyInt(5);
t.setMyString("Hello");
t.printDebugLog();
}
我希望输出如下:
myInt => 5
myString => Hello
简单的解决方案是立即创建日志。即添加Log
函数如下:
void Log(String s) {
System.out.println(s);
}
然后编写 set 函数,如下所示:
void setMyString(String s) {
myString = s;
Log("myString => " + s);
}
这需要对所有 set 函数进行各种编写,我想知道是否有任何更好解决方案。例如,创建一个SetValue
函数可能更容易(如果可能),该函数接受两个变量并将第一个属性设置为第二个对象的值。或类似的东西。
有什么想法吗?
答案 0 :(得分:2)
为此,您应该使用执行日志记录的正交代码来包装您的类。
由于您的类没有实现接口,因此您无法使用动态代理,因此您必须使用一种使用字节码工程的解决方案。
我所知道的最强大的解决方案是AspectJ。但可能你甚至不需要它。您可以使用Javassist或CGLIb - 允许创建包装类的代理的字节代码工程库,因此您可以添加执行日志记录的代码。
答案 1 :(得分:1)
您可以使用AOP拦截setter方法并在调用它们时记录。快速谷歌应该给你一些例子。
答案 2 :(得分:-3)
如果您通过JPDA进行调试,
你可以创建一个断点
在你喜欢看的场地上。