系统特定的错误查找?

问题描述:

我最近一直在搞多媒体库SFML。我自然使用C#,所以我去了.Net绑定,你可以从最新的2.0版本的SVN中获取。经过一段时间,我发现我的应用程序有时会在使用Text对象时挂断,该对象用于绘制纹理字体。系统特定的错误查找?

通过使用探查器和全能Windows任务管理器进一步调查发现,使用文本的简单应用程序似乎在某种程度上泄漏了内存。然后,我在SFML论坛上发表了一篇文章(the thread)。但是,SFML的主要开发人员无法重现他机器上的错误。以为我不能发疯,我把它发给了一位朋友,他说他确实看到了这件事。

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

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

谢谢!

+0

忘了提及,它似乎是垃圾回收相关的问题。 – 2010-02-09 19:44:19

+0

我很好奇......从C++的角度来看,使用结构作为类的占位符而不是使用类...只是浏览代码,并且跨过了我的脑海...有什么区别... – t0mm13b 2010-02-12 00:30:30

经过一段时间谈论IRC和各位帮助我,我想出了它。本地库不是线程安全的,因此在分配和释放被引用对象的同时存在问题。

我不确定可能会导致差异的原因,但考虑到您可以在计算机上重现问题,一个选项是调查为什么所有Text对象都处于悬停状态。你可以通过使用“sos”调试库和查询来找出什么是生根文本对象。在Visual Studio中使用sos的一个很好的介绍可用here

如果您只有Express版本的Visual Studio,则可以使用WinDbg调试器中的sos,该调试器是Debugging Tools for Windows的一部分。另一个适用于使用sod和WinDbg的好概述可以在here找到。

+0

非常感谢,很遗憾,我的IDE(VC#Express)不支持... http://msdn.microsoft.com/en-us/library/yy6d2sxs.aspx – 2010-02-10 23:29:58

+0

添加了一些关于在Visual Studio外部使用sos的信息,希望这有助于 – Dave 2010-02-11 00:53:54