Sleak(SWT& RCP):设备没有跟踪资源分配(eclipse 4.3)

时间:2014-01-30 15:33:11

标签: java eclipse debugging swt sleak

我的RCP应用程序(带有OpenCV java的视频播放器)抛出了着名的:

org.eclipse.swt.SWTError: No more handles错误

所以现在我找到了Sleak和tutorial

我尝试了第一种方式,但是当我启动应用程序并点击Sleak-View中的按钮时,我得到了:  “警告:设备未跟踪资源分配”。

当我以第二种方式执行时(.options文件和eclipse.ini中的-debug(插入befor -vmargs) 我在简洁的视图中得到了一些结果,但它们都是Eclipse Resources ...就像那里说的那样我跟踪了日食...但我不想...

我正在使用带有sleak build的Eclipse 4.3 SR1(RCP)运行4.3 (我已尝试使用4.4版本,但它也无法正常工作)

在我的RCP(e4)应用程序中没有我做的部分

Display display = PlatformUI.createDisplay();

与提议的here类似。

4 个答案:

答案 0 :(得分:1)

我刚遇到这个问题并解决了它。

转到调试配置 - >跟踪选项卡。 这里确保您已选择左侧的org.eclipse.ui并选择右侧的跟踪/图形和调试。 现在推出它。在您的RCP中,您现在将获得更多信息。

答案 1 :(得分:0)

将此添加到您的调试配置:

Tracing Tab:
    org.eclipse.ui:
    debug = true
    trace/graphics = true

http://www.vogella.com/tutorials/EclipsePerformance/article.html#performance_sleak

答案 2 :(得分:0)

我最近遇到了同样的问题,并设法找到了解决方案。这是我发现的,谁知道它可能对你有帮助。

在我们的RCP启动时,我们在Application类上调用了PlatformUI.createDisplay(),它连接到对Workbench.createDisplay()的调用。这是正确读取和设置Sleak所需的调试设置的确切位置。

在我们的软件上发生的事情是在上面调用PlatformUI.createDisplay()之前调用了Display.getDefault()。它导致创建一个新的Display对象,该对象被设置为默认对象。此创建没有读取和设置调试设置,因为它发生在不同的路径上。

当我们的代码进入PlatformUI.createDisplay()调用时,它实际上并没有创建新的显示。相反,它返回了先前创建的,不是调试友好的。因此,领导Sleak警告"设备不跟踪资源分配"。

在方法Display.register(显示屏显示)上添加断点帮助我们识别早期创建源并正确更改它。

你可能没有亲自在你的代码上手写createDisplay()调用,但我非常确定那里有一个,因为每个平台都需要一个显示器。

答案 3 :(得分:0)

在这一天的大部分时间都在苦苦挣扎,找到各种过时的食谱和HowTo页面...在其中一个eclipse论坛帖子中,有人引用了这个页面,这对我有用。 (氧气,纯E4独立RCP应用)

https://wiki.eclipse.org/Eclipse4/RCP/FAQ#How_to_use_Sleak_in_e4AP

即使这看起来很奇怪,你必须让你的Eclipse工作台应用程序运行时设置各种标志,然后在调试器中运行你的应用程序时注意你的项目设置。