【问题标题】:System-specific bug hunting?特定于系统的错误搜索?
【发布时间】:2011-01-14 23:26:58
【问题描述】:

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

通过使用分析器和全能的 Windows 任务管理器进行的进一步调查显示,使用 Text 的简单应用程序似乎以某种方式泄漏了内存。然后我在 SFML 论坛上发了一个帖子(the thread)。但是,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

谢谢!

【问题讨论】:

  • 忘了说,好像是垃圾回收相关的问题。
  • 我很好奇...从 C++ 的角度来看,使用结构作为类的占位符而不是使用类有什么不同...只是浏览代码,我就想到了...

标签: c# memory memory-leaks unmanaged-memory


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2011-01-30
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多