Vb 6使.exe与调试器的结果不同

时间:2008-10-21 11:20:52

标签: vb6

我正在比较使用'Make .exe'时产生的结果与通过IDE vb 6调试器使用完全相同的变量运行完全相同的过程时的结果。

我尝试了一系列不同的编译器选项,但无济于事。

所以我的问题是为什么我会在调试器和'Make .exe'之间找到区别? 你有没有得到类似的东西,如果是这样你找到了解决办法?

该程序在一个时间段内获取大量汽车数量,并将其平均为每个航线一个月内的15分钟时段。 它会消除某些记录,具体取决于是否存在标准差以外的其他统计算法以消除值。 不幸的是,它发布了很多代码...

4 个答案:

答案 0 :(得分:3)

Debug.AssertDebug.Print语句未编译到二进制文件中。我有时会用它来检测我是在IDE中还是在编译的二进制文件中:

On Error Resume Next
Debug.Print 1/0
If Err=0 then
  'Compiled Binary
else
  'in the IDE
End if

小心这样的陈述:

Debug.Assert( DoSomeThingImportend() )

在编译版本中,不会执行此语句。

答案 1 :(得分:0)

我发现在某些(非常罕见的)情况下,VB6的编译和调试代码可能存在差异。

尝试“编译到P代码”选项可能是值得的 - 有时这会产生与本机代码略有不同的结果。您可以在Project Properties / Compile选项卡中找到它。

如果您发布算法,我们将有可能找到更多可能性。

编辑:由于你不能发布算法,我建议逐步打破算法并尝试找出差异所在的位置。

答案 2 :(得分:0)

VB 6在编译一致性方面非常可靠。但是,如果你以任何方式依赖事件并使用doevent来屈服,那么可能就是一种可能性。

在IDE与编译代码中,这种组合的表现可能完全不同。

我猜你不是,但是,嘿,有待检查的东西。

答案 3 :(得分:0)

编译调试版本之间的大多数时间差异来自时序问题,调试版本稍微慢一点,可能会错过一些其他初始化值,或者没有等待足够长的时间来完成该过程的另一部分

您可以通过在代码的各个部分之间添加一些暂停来测试它 通常额外的DoEvent可以解决这个问题,或者让一些msgbox弹出(你可以将编译版本的中间结果与调试版本进行比较)

尝试找出计算的哪一部分给出了错误的结果,并将该部分分成单独的函数

通常差异直接发生在开始时(没有时间初始化),或者在过程中某个地方直到结束(在另一个过程后面运行)