以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 新版执行一报错程序就自动退出? (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=98100) |
-- 作者:luodang2050 -- 发布时间:2017/3/24 8:56:00 -- 新版执行一报错程序就自动退出? 如题,在调试代码时,当发生如下错误,会自动退出程序。 1、比如引用某控件,当该控件不存在时 2、字符串处理,数据类型不匹配时。 这样极为影响调试效率,问题定位难度加大。原升级前即使报错也可以继续调试,不知是新版报错机制的问题,还是新版影响了原有的代码
|
-- 作者:有点蓝 -- 发布时间:2017/3/24 9:14:00 -- 测试没有这种情况,之后弹出错误提示,不会自动退出。 贴出相关有问题的代码看看 一般形成死循环才会自动退出
|
-- 作者:luodang2050 -- 发布时间:2017/3/24 9:16:00 -- 检查了一下,新版的错误报错机制更加精准,但是原来的e参数貌似发生变化,原来可用的自定义报错现在都会出现致命错误,导致程序直接退出,暂时屏蔽了就没事了,不知是哪里发生变化了? \'函数调用0=================== \'Functions.Execute("项目捕获错误前执行",e) \'20160824项目捕获错误前执行,用于错误引导 \'e.Cancel :逻辑型,设为True将禁止系统显示错误信息. \'函数调用1=================== Dim e As object = args(0) err_Event = e.Event \'返回发生错误的事件名称 err_简明信息 = e.Message1 \'返回简明错误信息 err_详细信息 = e.Message2 \'返回详细错误信息 err_ex = e.ex \'返回发生的错误,一般用户不需要使用此参数. Dim s As String s = "【事件名称】:" & err_Event s &= _hl & "【简明信息】:" & err_简明信息 s &= _hl & "【详细信息】:" & _hl & err_详细信息 & _hl s &= "【ex】:" & _hl & Functions.Execute("捕获错误输出",err_ex) msgbox(s) \'函数调用0======================== \'Functions.Execute("捕获错误输出",ex,[s],[是否弹出警告]) \'返回:"error:" & ex.Message [& _hl & args(1)] \'ex:错误的对象 \'s:自定义错误提醒 \'[是否弹出警告],默认为false \'函数调用1======================== \'Return "error:捕获错误" Dim Ists As Boolean = False Dim ex As system.SystemException = args(0) Dim s As String s &= "Message:" & ex.Message s &= _hl & "Source:" & ex.Source s &= _hl & "HelpLink:" & ex.HelpLink \'s &= _hl & "Data:" & ex.Data If ex.Data.Count > 0 Then Dim tmp As String For Each de As System.Collections.DictionaryEntry In ex.Data tmp &= de.Key.ToString() & "\'" & de.Value Next s &= _hl & "ex.data:" & _hl & tmp End If If ex.InnerException IsNot Nothing Then s &= _hl & "InnerException:" & ex.InnerException.ToString( ) End If s &= _hl & "TargetSite:" & ex.TargetSite.ToString( ) s &= _hl & "StackTrace:" & ex.StackTrace If args.length > 1 s = "系统自动报错:" & _hl & args(1) & _hl & s Else s = "系统自动报错:" & _hl & s End If Dim 弹出警告 As Boolean = False If args.length>2 弹出警告 = args(2) End If If 弹出警告 Or Ists ClipBoard.SetText(s) MessageBox.Show(s) Else output.show(s) End If If args.length > 1 Return "error:" & ex.Message & _hl & args(1) Else Return "error:" & ex.Message End If |
-- 作者:有点色 -- 发布时间:2017/3/24 9:26:00 -- 加入msgbox弹出对应的值。或者上传实例测试。
http://www.foxtable.com/webhelp/scr/2655.htm
|
-- 作者:有点蓝 -- 发布时间:2017/3/24 9:36:00 -- 新版的异常处理机制确实有变动。 以前自定义函数有异常会自动弹出提示,不会提交给错误处理事件BeforeShowErrorMessage。 新版的变化是:如果有定义BeforeShowErrorMessage事件代码,则自定义函数会把错误扔给BeforeShowErrorMessage处理,自己不再弹出提示 你如果在BeforeShowErrorMessage调用了自定义函数,而这个自定义函数本身又会有异常,那么就会形成死循环了。 3楼的函数也不复杂,建议还是直接在BeforeShowErrorMessage事件处理吧
|
-- 作者:luodang2050 -- 发布时间:2017/3/24 9:55:00 -- 好的,暂时屏蔽,等有时间再仔细测试,谢谢 |