如果应用程序崩溃,执行代码?

问题描述:

在Visual Basic 6.0(VB6)中的一个小问题如果应用程序崩溃,执行代码?

假设我错过了一种可能的情况,并且用户做了一些事情并没有想到,那么他会得到一个错误,导致应用程序崩溃。有没有我可以使用的事件会执行某些代码,如果发生这种情况?

尝试Form_Terminate \ Unload \ Query_Unload,没有太多的运气。

崩溃: AKA运行时错误。

+0

我假设在碰撞事件日志中没有条目? – rene 2014-09-03 15:37:18

+0

如果没有其他选项是可行的,可以查看http://msdn.microsoft.com/en-us/library/windows/hardware/dn641144.aspx。 – rene 2014-09-03 15:39:03

+0

崩溃=运行时错误。雷内,我已经知道如何处理错误,即时通讯谈论更大的规模,而不是具体的捕捉。 (我总是可以在'错误转到X'或上帝禁止'错误恢复下一个'(又名磁带检查引擎灯)',但如果该错误来自另一段代码,我应该扫描错误并把它放在我编码的每一个事件上? – Stavm 2014-09-03 15:42:46

您可以在任何级别添加On Error支票,包括您的Sub Main。任何未在该功能级别进行错误检查的错误将通过调用堆栈上升到主/初始方法,您可以在那里捕获它们。

然后,您可以优雅地显示错误(以便您或您的用户知道它),然后在此时恢复任何最佳方法。而且,请记住,您可以在几个不同的战略级别和位置执行此操作。

如果错误发生在事件过程中,那么这些错误不会被困在Sub Main()中,因此您还需要在那里捕获它们。

任何出现在堆栈顶部的错误(出自Sub Main()或事件过程)都将被运行时捕获并且是致命的。您的代码将不会收到通知。

您可能也希望发布Good Patterns For VBA Error Handling

关于在VB6中频繁捕获错误的方法是通过使用On ErrorGOTO标签。在每个函数开始时,只要在出错时声明goto,并且每当出现错误时,都会执行GOTO部分。

请注意,转到部分应该在方法的末尾,所以在运行代码之后,不会执行其他代码段,而是离开函数。检查下面的例子;

Private Function MyMethod() 

    Dim sMsg As String 

    On Error Goto ErrHandler 

    ' ...code here... 

    Exit Function 

ErrHandler: 
sMsg = "Error #" & Err.Number & ": '" & Err.Description & "' from '" & Err.Source & "'" 
GoLogTheError sMsg 

End Function