以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于服务器端报错  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=148008)

--  作者:sky-18
--  发布时间:2020/3/29 0:08:00
--  关于服务器端报错
有个问题请教老师。
就是当服务器弹出错误提示框后,服务器处于一个卡死状态。
这时候客户端无法访问服务器。
虽然我知道把服务器的代码写完美且没有bug自然就不会报错,但找bug这个过程需要一个长时间使用的过程。
一旦服务器出现bug,那所有的客户端都无法访问服务器。非得开发者去解决服务器问题后才能恢复客户端访问。
这样很打击客户端使用者的积极性。
有没有办法不让客户端报错呀?即使在运行时遇到bug就将其"无害化",至少不要影响客户端出现访问
请老师指点,谢谢。

--  作者:sky-18
--  发布时间:2020/3/29 9:53:00
--  
自己顶一下
--  作者:huangfanzi
--  发布时间:2020/3/29 11:19:00
--  
我也帮你顶,我也是遇到这样的问题,所以经常远程连上服务器关闭报错窗口
--  作者:sky-18
--  发布时间:2020/3/29 13:23:00
--  
我在帮助文档里看到有个捕获错误的方法

Try
   代码一
Catch ex As Exception
   代码二
End Try
代码三


但是文档又说  不要轻易使用Try语句

不要轻易使用Try语句来捕获错误,除非遇到事先不能预判的错误,随便使用Try语句会降低代码质量和运行效率。



我就知道者不是我要的方法了。


请问老师对于服务器代码来说是不是有不然服务器报错的办法呢?

想一下代码量巨大的服务器来说有BUG是很正常的,不可能一报错,所有客户端都无法访问了呀。


--  作者:刘林
--  发布时间:2020/3/29 15:22:00
--  
1.项目事件BeforeShowErrorMessage在Foxtable捕获错误并即将显示错误信息前执行。
Functions.Execute("LogText",e.ex)
e.Cancel = True

2.自定义函数logtext

Dim v  = Args(0)
Dim msg As String
If Typeof v Is Exception Then \'如果是Exception的异常类型,则递归获取所有的异常堆栈
    Do While v IsNot Nothing
        msg &= v.Message &  vbcrlf & v.StackTrace & vbcrlf
        v = v.InnerException
    Loop
Else \'其它情况只能传入错误的文本内容
    msg = v
End If
Output.Logs("AppLogging").Add(Format( Date.Now,"yyyy-MM-dd HH:mm:ss.ffff") & vbCrLf & msg)
Output.Logs("AppLogging").Save(ProjectPath & "Mmsglog.txt",True) \'日志位于当前项目目录里
Output.Logs("AppLogging").Clear

--  作者:sky-18
--  发布时间:2020/3/30 5:58:00
--  
十分感谢
--  作者:huangfanzi
--  发布时间:2020/3/31 9:13:00
--  
原来可以这样啊,我目前就是加入了Try语句,但没用,只是减少了报错的机率,还是会一个月来上个1回2回的