如何调试VB6崩溃?

如何调试VB6崩溃?,vb6,crash,Vb6,Crash,我有一个应用程序,一旦编译运行非常好。但是,如果我在VB6环境中启动它,它会不断地、非常随机地崩溃IDE,但只有在我对应用程序采取操作时才会崩溃(例如,将鼠标移到它上面,单击某个对象,移动窗口等等) 该应用程序做了很多与VB6无关的事情:SIP、虚拟声卡接口、音频编码/解码等等……所以可能是这样,但崩溃似乎是随机的 崩溃总是发生在vba6.dll模块中(至少崩溃对话框是这么说的)。鉴于MS不再支持VB6,我可以做些什么来调试它 我在XP和Win7上试用过,结果相同。很可能有些API/DLL函数与

我有一个应用程序,一旦编译运行非常好。但是,如果我在VB6环境中启动它,它会不断地、非常随机地崩溃IDE,但只有在我对应用程序采取操作时才会崩溃(例如,将鼠标移到它上面,单击某个对象,移动窗口等等)

该应用程序做了很多与VB6无关的事情:SIP、虚拟声卡接口、音频编码/解码等等……所以可能是这样,但崩溃似乎是随机的

崩溃总是发生在vba6.dll模块中(至少崩溃对话框是这么说的)。鉴于MS不再支持VB6,我可以做些什么来调试它


我在XP和Win7上试用过,结果相同。

很可能有些API/DLL函数与VB IDE不兼容。我们有时为IDE和EXE编写不同的代码,我们的windows子类化和API绘图函数也位于另一个dll(或ocx)中,以避免崩溃。此外,我们在软件中使用GPF处理程序(SetUnhandledExceptionFilter和相关的API函数),但这仅在EXE中启用-无论如何在IDE中都不起作用。我们的GPF主要发生在EXE中:)


对于调试,您可以只排除一些代码路径,特别是与windows消息传递/子类化、全局挂钩、绘图和API回调相关的代码路径。您可以安装一些更好的调试器(甚至可以使用VC)来查看调用堆栈-有时这包括系统函数名,暗示错误操作。

我想您已经应用了VB6 service pack 6?在VB6进程中是否有任何“外来”或未知DLL注入可能造成危害,如反病毒、插件、第三方等?@Simon Mourier Yes,VB6 SP6。是的,还有一些第三方组件。如果可能的话,你可以尝试用VB6重新安装。从描述来看,这听起来像是一个内存损坏问题,只是碰巧以一种明显的“随机”方式将堆栈丢弃。在IDE中,破坏堆栈的问题可能比编译时严重得多。我以前也有过这种情况,要找到它们可能非常困难。禁用代码路径,大量日志记录,这可能是您最好的选择。我忘记了大量日志记录,谢谢您的提示!对于日志记录,您应该确保日志文件将在每次写入后立即关闭并刷新到磁盘,否则您可能(并且确实)丢失最后一个更有趣的条目。