hal*_*tan 6 java debugging intellij-idea
我真的不是调试专家,最近我遇到了一个问题,希望有一个简单的解决方案.当我测试和调试IDEA的Mathematica插件时,我编写了一些代码,构建它并在沙盒IDEA中运行它.
对于那些不熟悉为IDEA编写插件的人:主要问题是,所有的UI代码已经存在,因为它带有IDEA.我的插件只实现了使IDEA理解Mathematica语言所需的特定接口.因此,设置断点或抛出onClickListener@Jeroen建议的类似内容是不可能的,因为我几乎没有编写任何单行的UI代码*.
现在我遇到了一切正常的情况,但是当我取消一个特定的动作时,会发生一些奇怪的事情.我不知道当我按下Esc取消此操作时调用哪个特定方法(它不是我的!).目前的观点很可能深入到IDEA的源代码中,我可以使用调试器进行导航!
问题:当我按下Esc我当前正在调试的UI程序时,无论在哪里,最简单的Java调试器是什么?
*这不完全正确,但为了一般解决方案,我想以这种方式来考虑它.
正如本问题中所讨论的,您可以创建自己的子类EventQueue来检查事件,并在代码中创建一个位置,您可以在其中设置断点并仅捕获某些类型的事件。它可能看起来像这样:
EventQueue eventQueue = Toolkit.getDefaultToolkit().getSystemEventQueue();
eventQueue.push(new EventQueue(){
public void postEvent(AWTEvent theEvent) {
if(theEvent instanceof KeyEvent){
KeyEvent kEvent = (KeyEvent)theEvent;
if(kEvent.getKeyCode() == KeyEvent.VK_ESCAPE){
System.out.println("escape pressed, set breakpoint here");
}
}
super.postEvent(theEvent);
}
});
Run Code Online (Sandbox Code Playgroud)
然后,当您遇到该断点时,您可以单步执行super.postEvent()调用并查看调用的位置、哪个组件接收它以及它们何时开始与代码的某些部分进行交互。不过,请预先警告,这可能是一个漫长的过程——AWT/Swing 事件调度可能会变得相当复杂。
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |