Foxtable(狐表)用户栏目专家坐堂 → 新版执行一报错程序就自动退出?


  共有1383人关注过本帖树形打印复制链接

主题:新版执行一报错程序就自动退出?

帅哥哟,离线,有人找我吗?
luodang2050
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:585 积分:5674 威望:0 精华:0 注册:2014/5/21 10:30:00
新版执行一报错程序就自动退出?  发帖心情 Post By:2017/3/24 8:56:00 [只看该作者]

如题,在调试代码时,当发生如下错误,会自动退出程序。
1、比如引用某控件,当该控件不存在时
2、字符串处理,数据类型不匹配时。
这样极为影响调试效率,问题定位难度加大。原升级前即使报错也可以继续调试,不知是新版报错机制的问题,还是新版影响了原有的代码

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107328 积分:545907 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/24 9:14:00 [只看该作者]

测试没有这种情况,之后弹出错误提示,不会自动退出。

贴出相关有问题的代码看看

一般形成死循环才会自动退出

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:585 积分:5674 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By: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


 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/3/24 9:26:00 [只看该作者]

加入msgbox弹出对应的值。或者上传实例测试。

 

http://www.foxtable.com/webhelp/scr/2655.htm

 


 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107328 积分:545907 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/3/24 9:36:00 [只看该作者]

新版的异常处理机制确实有变动。

以前自定义函数有异常会自动弹出提示,不会提交给错误处理事件BeforeShowErrorMessage

新版的变化是:如果有定义BeforeShowErrorMessage事件代码,则自定义函数会把错误扔给BeforeShowErrorMessage处理,自己不再弹出提示

你如果在BeforeShowErrorMessage调用了自定义函数,而这个自定义函数本身又会有异常,那么就会形成死循环了。

3楼的函数也不复杂,建议还是直接在BeforeShowErrorMessage事件处理吧

 回到顶部
帅哥哟,离线,有人找我吗?
luodang2050
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:585 积分:5674 威望:0 精华:0 注册:2014/5/21 10:30:00
  发帖心情 Post By:2017/3/24 9:55:00 [只看该作者]

好的,暂时屏蔽,等有时间再仔细测试,谢谢

 回到顶部