2010-05-28 72 views
0

我知道我伸手吸管这里,但是这一次是一个谜......任何指针或帮助将是最欢迎的,所以我呼吁那些更聪明,比我:卸载DLL时计时相关崩溃?

我们有一个崩溃仅在我们的发布二进制文件中展示。崩溃发生在二进制文件自动关闭并终止它所依赖的子库时发生。它的复制能力取决于机器 - 有些100%可靠地再现碰撞,有些完全没有表现出这个问题,有些则介于两者之间。崩溃在其中一个子库中很深,并且在将瓦砾带入调试器(MSVC 2008 SP1)进行检查时,堆栈很可能已损坏。在调试器下运行二进制文件可防止发生错误,远程调试也是如此,因为通过VNC连接到机器(所有内容)都是如此。我们试图安装微软驱动程序开发工具包,并且这样做也压制了这个错误。

下一个最好看的地方是什么?在这种情况下哪些工具最适合?这听起来像是比赛条件还是别的?

+0

听起来很像某种类型的线程错误。有没有工作与不工作的机器模式?例如。单核/双核等VNC的东西是一个谜 - 在关机过程中是否有任何图形工作? – mdma 2010-05-28 20:36:31

+0

您的应用程序(或其库)是否使用任何窗口?如果是这样,你可能需要卸载一个dll来处理消息(例如,dll包含wndproc,但在窗口被销毁之前dll被卸载)。 – jdigital 2010-05-28 20:48:35

+0

@mdma:迄今为止我们无法检测到任何模式。 – fbrereto 2010-05-28 20:52:53

回答

0

问题是在Visual Studio下有害_SECURE_SCL标志的冲突设置,导致DLL和它的某个依赖项之间无声的ABI不兼容。

1

您是否试过Rational Purify?我用过这个(大约4-5年前)。然后,它是在IBM 跟踪内存错误,堆栈损坏,无效的把手等

1

尝试AppVerifierGFlags一起找到页堆腐败很有帮助。

您可能需要WinDbg作为调试器而不是Visual Studio来调试。

我也推荐this book在先进的Windows调试跟踪崩溃,如你打的。

1

您是否正在使用线程池,并且未取消或等待未完成的作业对象完成?