IDE 在 java fx 应用程序的断点处以调试模式挂起

Posted

技术标签:

【中文标题】IDE 在 java fx 应用程序的断点处以调试模式挂起【英文标题】:IDE hangs in debug mode on break point in java fx application 【发布时间】:2015-03-07 22:22:37 【问题描述】:

我在 IntelliJ IDEA 中调试时遇到问题,它在 javafx 应用程序的侦听器断点处以调试模式挂起。我试图增加堆空间,但这无济于事。也许有人也有这样的问题,请建议我该怎么做。

【问题讨论】:

【参考方案1】:

发生这种情况的原因很简单:应用程序在桌面上有锁,例如模式对话框或弹出窗口或打开的菜单。然后它在断点处停止。这会通知 IDE。现在 IDE 尝试在您的桌面上执行某些操作,但由于应用程序仍然锁定整个桌面 -> 死锁,因此无法执行。

您可以使用像Chronon 这样的工具来记录整个节目并让您在时间轴上来回移动。

最后一个选项是记录或poor man's debugger (System.out)。

[编辑]

很难用 System.out 来检查 20 个参数中哪个不相等。

其实很简单:

System.out.println("check");
if(!a1.equals(b2)) System.out.println(a1+"!="+b1);

然后复制最后一行。这样,您只会在某些事情真正有趣时获得输出(而不是 19 个相等的参数)。如果您无法区分 aXaY(即两者都是 true),请在输出中添加一些模式:

if(!a1.equals(b2)) System.out.println("a1:"+a1+"!="+b1);

【讨论】:

如果我必须检查两个具有 20 个参数的对象是否相等,并且它返回 false,但我实际上期望为 true,那么很难使用 System.out 检查 20 个参数中哪个不相等。我的同事在调试监听器时也没有这样的问题,但他们也不知道出了什么问题,我们都有相同的硬件、操作系统和环境。 我喜欢这里的解释,但不喜欢解决方案。我试图让我的调试器在 Ubuntu 上工作,我需要它工作。我的 OSX 机器上的相同 IDE 和相同应用程序没有这些问题。我有哪些选择? @user2223059 您可以在接受的答案中使用命令行选项,使用日志记录,Chronon,或者您可以为 Linux 创建一个新的无锁桌面。【参考方案2】:

将此设置为 VM 参数:

-Dsun.awt.disablegrab=true

它会弄乱拖放,并在调试器暂停时在您的屏幕上留下一个工件 - 但它会让您调试。每当您阻塞 JavaFX 线程时就会发生这种情况。

【讨论】:

谢谢,我用这个把头发拉出来了。 谢谢!当我尝试调试旧应用程序时,我的笔记本电脑(运行 Ubuntu 16.04)死机了(唯一的出路是 ctrl+alt+f1 并运行sudo killall java),但这有帮助:) 你就是救命恩人。这个问题让我抓狂。谢谢 也适用于 Eclipse! 谢谢,它也适用于 awt,我没有在我的应用程序中使用 javafx,我在我的运行配置中添加了这个选项 ias VM 选项。 Ubuntu 18.10。

以上是关于IDE 在 java fx 应用程序的断点处以调试模式挂起的主要内容,如果未能解决你的问题,请参考以下文章

Java Eclipse进行断点调试

eclipse断点调试

有没有办法在调试中“此时”设置断点?它是关于任何编程语言或 IDE

pycharm调试怎么执行下去

IDE系列—— Debug模式

phpstorm怎么设断点调试