我做好了一个网络考试软件即将投入使用.估计还会存在一些错误,但是别人用时出现自己不好调试,我看有些软件在出错时会提示把一些信息或文件发给软件制作者去调试.
这样的查错误原理是怎样的?能帮我解释一下吗?是不是出错时把所有变量值保存下来?给制作者查找原因?

解决方案 »

  1.   

    文件操作咯在函数里面写
    on error goto "写日志部分"其实一般的做法是在进入函数的退出函数的时候都记录一下函数的参数值,执行状态;当然了,检测到错误的时候也要记录.频繁的文件操作对执行效率是会有一定影响的,可以设置个日志开关,比如做个命令行参数,用户使用的时候默认不要开启,出问题调试的时候你再用相应的命令行来启动调试;如果程序运行时的信息比较敏感,怕记录的信息被别有用心的人拿到,可以将信息加密后再记录到日志文件.这种手段检测到的错误都是比较上层的,通常是一般的程序逻辑错误,字符串处理,数组操作,文件不存在等等这些常见的问题,这类错误一旦定位到问题源,解决好也就是十几分钟的事情了.纯VB写的程序错误基本上可以这样解决;
    如果错误是由调用系统API或自己写的DLL引起的,会麻烦些,通常程序会很不留情的直接抛出个'应用程序错误'的错误窗口给你,然后直接罢工,这种问题比较棘手,你的日志模块可能还没来得及执行,查看自己的日志来排错显得很被动了.
    这时候可以使用windows自带的调试工具,dr.wasten32(华医生),该工具会记录程序出错时的内存信息,也就是我们常说的dum文件,可以用windebug调试dum文件模拟运行到程序最后出错时的环境,这步需要比较强的汇编功底,不过vb运行库里面的函数名和我们在IDE里面看到的是差不多的,运气好的话,立刻能定位错误源.否则只能硬头皮排查代码了.
    windows系统本身提供日志信息服务功能,就是我们使用软件时常见到的错误对话框,目前一些大型的应用软件都已经运用进去了,如QQ,如迅雷,支持在线发送出错信息到设定的日志服务器.
    可以参考msdn的windows error report说明
    以上我是做项目时用过的调试手段,方法好坏见仁见智,软件排错是件很麻烦的事情,未雨绸缪相当重要,希望对你有帮助
      

  2.   

    对于VB源代码级的错误比较好解决,使用On error goto xxxxxx即可.然后在xxxxx处:sub test
        on error goto ErrHandle    msgbox 0/1    exit sub
    ErrHandle:
        call addlog("test( " & Date & "/" & Time & " ): " & Err.Description)
        resume next   '这里是否返回要看你代码的情况.
    end subsub AddLog(byval LogStr as string)
        dim lFile as long    lfile=freefile
        logstr=vbcrlf & logstr
        open lfile for binary as #lfile
            put #lfile,lof(lfile),logstr
        close #lfile
        msgbox "软件出现错误,请将XXXX文件发送致[email protected]"
    end sub
    对于内存读写类的错误,使用SEH技术拦截下来,则一样可以调用addlog过程进行记录:http://topic.csdn.net/u/20090714/04/6c925475-9b01-402e-83aa-24846bed0b24.html也可以如楼上所说使用系统的日志机制.