【问题标题】:VB6 app vanishes without a trace: will switching between PCode and Native Code make a difference?VB6 应用程序消失得无影无踪:PCCode 和 Native Code 之间的切换会产生影响吗?
【发布时间】:2009-03-05 17:51:50
【问题描述】:

我知道这个主题已经在新闻组中被写死了,并且有非洲论坛帖子 - 但我希望你们专家可以选择堆栈溢出 :)

我们的 VB6 应用程序偶尔会在用户执行操作时消失,并且不会给出任何类型的错误,也不会出现在 PC 的错误日志中!

我想知道是否有人以前在 VB6 上听说过这个问题,你做了什么来解决它?

我认为也许将所有代码从本机代码更改为 pcode 可能会提供更高的稳定性?


额外信息:

  • 我们使用的是 Mdac 2.8
  • 真正的 DB 网格 6.0e

编辑中添加的注释:

  • 我们的应用程序非常大,包含 113 个独立的组件和 120MB 的编译大小(即没有嵌入图片或任何内容)
  • 我们的表示层动态创建对象,因此所有内容都是后期绑定的。
  • 我并不真正关心 VB6 应用程序的本地性能,因为据我所知,它并没有真正进行任何认真的处理,因此性能完全被我们位于 80 英里外的数据中心的 Oracle 数据库所限制300 名用户 - 噩梦!

【问题讨论】:

  • >>但我想要你们专家的堆栈交换选项:) 可能你混淆了“专家交换和堆栈溢出!!
  • 我在赶车离开办公室的时候匆匆输入了这个 - 所以专家交流突然出现在我的脑海里 - 我的错 :)

标签: compiler-construction vb6 stability


【解决方案1】:

它有所作为。但不赞成其中之一。因为两种方法并不完全相同,所以它们会在边缘情况下产生不同的结果。

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

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

当这种罕见的情况发生时,唯一的解决方法是重新排列代码行或插入像 i = i 这样的虚拟行。任何会强制编译器发出不同序列的程序集或 pcode 的东西。然后问题就消失了。

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

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

我的经验是,对于具有多个引用的大型项目,每 1000 到 500 次编译可能会发生一次。

作为个人评论,发生这种情况的原因和解决方案似乎很荒谬,让我想打破巫毒娃娃并跳起雨舞。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 1970-01-01
    • 2021-06-21
    • 2017-01-04
    • 2014-01-23
    • 1970-01-01
    • 2017-02-27
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多