3

我最近一直在搞乱SFML,一个多媒体库。我使用 C#,所以我很自然地选择了 .Net 绑定,您可以从最新 2.0 版本的 SVN 中获取该绑定。搞砸了一段时间后,我注意到我的应用程序有时会在使用 Text 对象时挂起,这是一个用于绘制纹理字体的对象。

通过使用分析器和全能的 Windows 任务管理器进行的进一步调查显示,使用 Text 的简单应用程序似乎以某种方式泄漏了内存。然后我在 SFML 论坛上发表了一个关于它的帖子(主题)。但是,SFML 的主要开发人员无法在他的机器上重现该错误。我想我不可能疯了,我把它发给了一个朋友,他报告说他确实看到了它的发生。

我为 SFML 的开发者 Laurent 做了一个例子,但他仍然无法重现这个错误。考虑到这可能与操作系统有关,我将文件发送给我能找到的每个人,并询问他们的操作系统。这是我的结果:

http://spreadsheets.google.com/ccc?key=0AhcHeJlLGEVUdG1TTi1mTkFxeFlHYVRISXhjbFBDUmc&hl=en

如您所见,Turc 和 K7 都具有相同的操作系统,但它不会在 K7 上崩溃(该表不完整,测试候选人尚未报告)。无论如何,这告诉我这显然不是操作系统问题。

所以我的实际问题是,除了操作系统或架构之外,还有哪些其他因素会影响此类仅出现在某些系统上的错误?

供参考,这里是我发给朋友的文件:http: //dl.dropbox.com/u/3310651/MemLeak2.rar

以及我所做的分析截图:http: //dl.dropbox.com/u/3310651/sfml_memleak.png

谢谢!

4

2 回答 2

1

我不确定是什么导致了这种差异,但鉴于您可以在您的机器上重现该问题,一种选择是调查为什么所有 Text 对象都在附近徘徊。您可以通过使用“sos”调试库并查询来找出文本对象的根源。此处提供了有关在 Visual Studio 中使用 sos 的良好介绍。

如果您只有 Visual Studio 的 Express 版本,则可以使用 WinDbg 调试器中的 sos,它是Windows 调试工具的一部分。可以在这里找到另一个适合在 WinDbg 中使用 sos 的好概述。

于 2010-02-10T11:19:15.787 回答
0

在 IRC 和帮助我的人讨论了一段时间后,我想通了。本机库不是线程安全的,因此同时分配和解除分配引用的对象存在问题。

于 2010-02-13T00:43:20.220 回答