imnebula 发表于 2011-2-14 02:18:43

如果排除程序的BUG?

本帖最后由 imnebula 于 2011-2-14 02:23 编辑



我写的程序 ,用着用着,不知道什么时候就会弹出一个错误的窗口,提示LINE XXX(数字)。
这里的数字有时候往往很大,已经超出我的代码的实际行数。

可能是我代码里有循环语句。所以大。

但这样的话。我怎么知道 到底是哪里出错呢。为什么会出现这样的错误?

happytc 发表于 2011-2-14 03:25:35

本帖最后由 happytc 于 2011-2-14 03:31 编辑

超过实际行数,那里因为exe里,有着很多你#include的代码(跟循环没有关系)。而出现这些错误,说明你写的代码健壮性不好,没有考虑到一些特别情况。想要知道那里出错了,一则可以用Debug模式找,再则就是运行script时,想想什么情况(操作)下会出现这种错误提示,让它再现。

说了半天,还是你写的代码中有些情况没有考虑到

chenronting 发表于 2011-2-14 12:43:18

{:face (382):}回复 2# happytc


    Debug模式是什么样的?

xyold1 发表于 2011-2-14 16:06:29

#AutoIt3Wrapper_Run_Debug_Mode=Y加上它,很有用

imnebula 发表于 2011-2-14 16:10:04

谢谢大家。虽然还是不太明白。

我再检查检查吧。

imnebula 发表于 2011-2-14 16:11:14

回复 2# happytc

HAPPYTC您 好。您 所说的“说明你写的代码健壮性不好,没有考虑到一些特别情况。”

具体是指什么呢?能不能举个例子,我好反省一下我写程序过程中存在什么毛病和不足。非常感谢!
如何增强代码的健壮性和怎么考虑特别情况呢。/

happytc 发表于 2011-2-15 20:29:55

回复happytc

HAPPYTC您 好。您 所说的“说明你写的代码健壮性不好,没有考虑到一些特别情况。”

具 ...
imnebula 发表于 2011-2-14 16:11 http://www.autoitx.com/images/common/back.gif
没看到你的代码,不能具体问题具体分析了,只能泛泛地说。还是举个例子吧,比如,你在用函数:$arr = IniReadSectionNames("f:\a.ini"),可能一般情况下文件f:\a.ini里都会有section,从而你接着用:for $i = 1 to $arr ……语句时都没有问题,而当返回值$arr不是数组时,用后面的for语句就会出现你一楼出现的类似错误,从而让au3退出。

imnebula 发表于 2011-2-16 06:12:44

回复 4# xyold1


加了,还是有问题,不知道您说的很有用是指什么呢。谢谢。

xyold1 发表于 2011-2-16 18:01:50

回复 8# imnebula
我说调试有用

飘云 发表于 2011-2-16 20:41:53

既然你遇到了报错,那么总应该知道是什么样的情况下吧?你可以不要编译成exe,用au3脚本直接F5试运行,然后让程序进入相同的情况,出错后,点确定关闭报错框,程序自动退出,这时在SciTE也就是au3的那个脚本编辑器里的下面那个框里,有出错相关内容,需要用鼠标往下还是往上来着,找找。
还有,LS说的有用是指对于调试程序,方便用户找到出错的地方有用啊,不是加了那一条程序就不会报错了,报错的根本原因就是你的代码在实际使用中存在缺陷,对于一些函数的错误没有理会,顽固的使用上个函数出错的结果进行下一个函数的应用,这才会报错。

飘云 发表于 2011-2-16 20:48:29

就比如图上说请求动作失败,那么当时你正要干什么,是打开目标文件吗?既然说失败,那么假设是打开或者读取操作失败,那么可能是因为目标文件被写了保护,而你的程序没有写“如果目标被保护了读不到内容程序该怎么做”,自然就报错了。
如果LZ真心想要找出问题所在,可以把你的源码发上来,不然大家帮不了你

republican 发表于 2011-2-16 23:38:56

请求动作失败应该是obj引起的,加个ObjEvent事件就可以了。

imnebula 发表于 2011-2-17 02:35:08

回复 11# 飘云

谢谢飘云兄的详细 建议!我已经重新检查了代码,现在基本不会有错误 提示了。非常感谢!:)
页: [1]
查看完整版本: 如果排除程序的BUG?