我正在比较使用'Make .exe'时产生的结果与通过IDE vb 6调试器使用完全相同的变量运行完全相同的过程时的结果。
我尝试了一系列不同的编译器选项,但无济于事。
所以我的问题是为什么我会在调试器和'Make .exe'之间找到区别? 你有没有得到类似的东西,如果是这样你找到了解决办法?
该程序在一个时间段内获取大量汽车数量,并将其平均为每个航线一个月内的15分钟时段。 它会消除某些记录,具体取决于是否存在标准差以外的其他统计算法以消除值。 不幸的是,它发布了很多代码...
答案 0 :(得分:3)
Debug.Assert
和Debug.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弹出(你可以将编译版本的中间结果与调试版本进行比较)
尝试找出计算的哪一部分给出了错误的结果,并将该部分分成单独的函数
通常差异直接发生在开始时(没有时间初始化),或者在过程中某个地方直到结束(在另一个过程后面运行)