调试一个SWT应用程序会导致所有GTK应用程序冻结

5
我有一个 SWT 应用程序,通过 Eclipse 远程调试进行调试。如果我在 SWT 应用程序的事件处理程序中设置断点,我的整个桌面都会冻结。我仍然可以通过 Strg+Alt+Fx 切换到文本控制台。如果我从控制台杀死 SWT 应用程序,一切都会继续工作。
由于这只发生在断点位于事件处理程序内部时,我高度怀疑 SWT 在事件循环中阻塞导致所有内容都被冻结。我的猜测是,SWT 有一些神奇的参数可以“分离”应用程序,以便我可以正确地进行调试,但我无法找到它。

当我试图在Ubuntu下调试Swing应用程序时,我遇到了同样的问题。如果我在调试模式下进入Swing处理程序(例如渲染方法),应用程序和我的调试器(Eclipse)都会冻结。 - Yohan Liyanage
如何禁用 Compiz,以避免它经常导致 Gnome 桌面不稳定? - Kane
2个回答

9
这是一个已知的问题,本地小部件会抓取X指针并且不释放它。最常见的解决方法是在另一个显示器上运行您的内部Eclipse。我经常遇到这个问题,所以我使用Xvnc,但其他例子包括XNest
我看到有人尝试使用-Dsun.awt.disablegrab=true。我不知道是否有效。
请参见https://bugs.eclipse.org/bugs/show_bug.cgi?id=20006,了解该问题及人们尝试的解决方法的详细讨论。
PW

我已经阅读了这个错误的讨论并尝试了一些提出的解决方案 - 没有一个有效。我想我们只能接受它。 - Martin Thurau
到目前为止,我一直认为使用两个屏幕是解决死机的唯一方法。参见http://bugs.sun.com/view_bug.do?bug_id=6714678。这必须传播到全世界! - albfan

0

我在使用Linux mint 11和JRE 1.6.0.xx时,经常遇到这个问题,尽管只是使用标准的Swing组件进行本地调试。当在事件处理程序中触发断点时,x11似乎会完全冻结,我需要降级到shell来杀死Java进程。

设置-Dsun.awt.disablegrab=true可以解决我的问题。

我只是为调试配置设置了VM参数,我想对于远程调试,您需要确保远程应用程序在命令行(或者无论如何启动)上使用这个VM选项启动,而不是在IDE调试配置或者以此选项启动Eclipse。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接