为什么断点调试的时候正常,直接运行就出错?

yinzs 2010-03-23 09:23:13
有一段程序代码,大致是这样的:

While checkOK=False
。。。。
For i = 0 To 7
Select Case str(i)
Case 3
。。。。
checkOK=True
Case 2
。。。。
Case Else
。。。。
End Select
Next i

End While
。。。。。

直接运行这个程序,貌似while只执行了一边,后续程序就出错了。但是如果在调试的时候,在end while或前面某处设置一个断点或者msgbox,就没有问题。
这是为什么?
怎么样才知道到底是什么错误?
谢谢!
...全文
2058 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnzdgs 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yinzs 的回复:]
是的,就是这样。while段是串口传输数据,后面的代码就是跟传输结果有关。

所以我用sleep就可以了吗?还是要改成其他的?
[/Quote]
最好是等待操作完成,如果无法得知操作何时完成,就只能用Sleep的方式了。
yinzs 2010-03-23
  • 打赏
  • 举报
回复
checkOK在while开始之前就初始为false了。
就是说还是代码有错误了。
因为,如果不加断点,我在后面查了一下,每次返回的传输结果都是不一样的。有时候他只执行一次while。
xingyuebuyu 2010-03-23
  • 打赏
  • 举报
回复
checkOK在退出While循环之后就为True,那你在下次运行到While循环之前是否有将checkOK设为False,以及在哪里设置的?

sleep不是必须的,可以通过修改其它地方的代码避免使用的
yinzs 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 cnzdgs 的回复:]

引用 3 楼 yinzs 的回复:
代码牵连的比较多,算了,就不贴了,我刚才试了一下,在end while前面加了一个sleep就好了。

这说明你的程序在循环之后执行的代码依赖于某个异步I/O操作的结果,sleep、msgbox以及断点都会使程序暂停,等到程序继续执行时,异步I/O已经完成了,所以可以正常运行。检查一下程序依赖的操作具体是什么,用代码来执行等待。
[/Quote]
是的,就是这样。while段是串口传输数据,后面的代码就是跟传输结果有关。

所以我用sleep就可以了吗?还是要改成其他的?
cnzdgs 2010-03-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yinzs 的回复:]
代码牵连的比较多,算了,就不贴了,我刚才试了一下,在end while前面加了一个sleep就好了。
[/Quote]
这说明你的程序在循环之后执行的代码依赖于某个异步I/O操作的结果,sleep、msgbox以及断点都会使程序暂停,等到程序继续执行时,异步I/O已经完成了,所以可以正常运行。检查一下程序依赖的操作具体是什么,用代码来执行等待。
tjficcbw 2010-03-23
  • 打赏
  • 举报
回复
加个这个,Application.DoEvents()
也行,
wuyq11 2010-03-23
  • 打赏
  • 举报
回复
多线程调用
xingyuebuyu 2010-03-23
  • 打赏
  • 举报
回复
难道用了多线程?不然怎么用会sleep
koukoujiayi 2010-03-23
  • 打赏
  • 举报
回复
哦哦!!
yinzs 2010-03-23
  • 打赏
  • 举报
回复
代码牵连的比较多,算了,就不贴了,我刚才试了一下,在end while前面加了一个sleep就好了。
贝隆 2010-03-23
  • 打赏
  • 举报
回复
单这点代码,看不出来
xingyuebuyu 2010-03-23
  • 打赏
  • 举报
回复
贴完整的代码,这样看不出问题

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧