在子类的最终方法上设置断点

时间:2015-10-22 07:25:41

标签: java eclipse debugging breakpoints eclipse-jdt

有没有办法在Eclipse JDT中为超级类中的最终方法设置断点,只有在特定子类上调用该方法时才会触发它?

例如,我希望MyClass#notify()上的断点在任何线程调用后立即触发

MyClass test...
synchronized (test) {
    test.notify();
}

但是,断点只应针对MyClass的实例触发,而不应针对任何Object触发。

是否有办法在Object#notify()上过滤断点,例如使用conditional breakpoint?我已经尝试了this instanceof somepackage.TestNotifyBreakpoint.MyClassthis.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);
            }
        });
    }
}

0 个答案:

没有答案