2014-09-03 67 views
1

在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

回答

2

您可以在任何級別添加On Error支票,包括您的Sub Main。任何未在該功能級別進行錯誤檢查的錯誤將通過調用堆棧上升到主/初始方法,您可以在那裏捕獲它們。

然後,您可以優雅地顯示錯誤(以便您或您的用戶知道它),然後在此時恢復任何最佳方法。而且,請記住,您可以在幾個不同的戰略級別和位置執行此操作。

如果錯誤發生在事件過程中,那麼這些錯誤不會被困在Sub Main()中,因此您還需要在那裏捕獲它們。

任何出現在堆棧頂部的錯誤(出自Sub Main()或事件過程)都將被運行時捕獲並且是致命的。您的代碼將不會收到通知。

您可能也希望發佈Good Patterns For VBA Error Handling

0

關於在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 
相關問題