以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  新版执行一报错程序就自动退出?  (http://foxtable.com/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
--  
好的,暂时屏蔽,等有时间再仔细测试,谢谢