Compiler construction VB6应用程序消失得无影无踪:在PCode和本机代码之间切换是否会有所不同?

Compiler construction VB6应用程序消失得无影无踪:在PCode和本机代码之间切换是否会有所不同?,compiler-construction,vb6,stability,Compiler Construction,Vb6,Stability,我知道这个话题已经在新闻组上被讨论到了极点,还有一些非洲论坛的帖子——但我想让你们这些堆栈溢出专家选择:) 我们的VB6应用程序偶尔会在用户执行操作时消失,不会出现任何错误,也不会出现在电脑的错误日志中 我想知道以前是否有人在VB6上听说过这个问题,以及您做了什么来修复它 我想也许将所有代码从本机代码更改为pcode可以提供更大的稳定性 额外信息: 我们正在使用MDAC2.8 True DB Grid 6.0e 编辑中添加的注释: 我们的应用程序非常大,有113个独立的组件和120MB的

我知道这个话题已经在新闻组上被讨论到了极点,还有一些非洲论坛的帖子——但我想让你们这些堆栈溢出专家选择:)

我们的VB6应用程序偶尔会在用户执行操作时消失,不会出现任何错误,也不会出现在电脑的错误日志中

我想知道以前是否有人在VB6上听说过这个问题,以及您做了什么来修复它

我想也许将所有代码从本机代码更改为pcode可以提供更大的稳定性


额外信息:

  • 我们正在使用MDAC2.8
  • True DB Grid 6.0e
编辑中添加的注释:

  • 我们的应用程序非常大,有113个独立的组件和120MB的编译大小(没有嵌入图片或任何东西)
  • 我们的表示层动态创建对象,因此所有内容都是后期绑定的
  • 我并不真正关心VB6应用程序的本地性能,因为据我所知,它并没有真正进行任何严肃的处理,所以性能完全受到距离300个用户80英里的数据中心的Oracle数据库的限制-噩梦
这会有所不同。但不支持其中一个。因为这两种方法并不完全相同,所以它们可以对边缘情况产生不同的结果

还要明白,我所描述的问题是编译器问题,而不是程序员的错误。所以你要确定这就是问题所在。我们通过将更改与上一个已知的良好版本进行比较来检查这一点

我们遇到的问题是,对于我们的一些较大的项目,代码中的一个小更改将导致错误(或者应用程序消失)。使用二进制文件时会发生这种情况

当这种罕见的情况发生时,唯一的修复方法是对代码行重新排序或插入伪行,如i=i。强制编译器发出不同的汇编或pcode序列的任何操作。然后问题就消失了

有几个例子,我们做到了这一点,成功地编译,更改回来,并成功地编译回来。我们认为在这种情况下发生的是注册表更改足以强制发出一组稍微不同的二进制/pcode

您可能还需要清理注册表和本地临时文件夹

我的经验是,对于一个包含多个引用的大型项目,这种情况可能每1000到500次编译就发生一次


作为个人评论,当这种情况发生时,原因和解决方案似乎是毫无意义的,让我想打破巫毒娃娃,跳一支雨舞。

>但我想让堆栈交换专家选择:)可能你搞错了“专家交换和堆栈溢出!!就在我的车要离开办公室的时候,我匆忙地输入了这句话——所以专家交流突然出现在我的脑海里——我的坏:)