有没有办法在Eclipse JDT中为超级类中的最终方法设置断点,只有在特定子类上调用该方法时才会触发它?
例如,我希望MyClass#notify()
上的断点在任何线程调用后立即触发
MyClass test...
synchronized (test) {
test.notify();
}
但是,断点只应针对MyClass
的实例触发,而不应针对任何Object
触发。
是否有办法在Object#notify()
上过滤断点,例如使用conditional breakpoint?我已经尝试了this instanceof somepackage.TestNotifyBreakpoint.MyClass
和this.getClass().getName().equals("somepackage.TestNotifyBreakpoint.MyClass")
这样的条件,但没有运气:第一个条件给我一个somepackage cannot be resolved to a type
错误,第二个条件出现Attempt to send a message to a non object value
错误。
这是一个简单的例子 - 断点应该在test.notify();
执行时触发。
package somepackage;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class TestNotifyBreakpoint {
public static class MyClass {}
public static void main(String[] args) {
MyClass test = new MyClass();
Thread t = new Thread(){
@Override
public void run() {
System.out.println("waiting for notify");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
synchronized (test) {
System.out.println("About to notify");
test.notify(); // should trigger the brakepoint
}
System.out.println("Notify done");
}
};
t.start();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
});
}
}