在Visual Basic 6.0(VB6)中的一個小問題如果應用程序崩潰,執行代碼?
假設我錯過了一種可能的情況,並且用戶做了一些事情並沒有想到,那麼他會得到一個錯誤,導致應用程序崩潰。有沒有我可以使用的事件會執行某些代碼,如果發生這種情況?
嘗試Form_Terminate \ Unload \ Query_Unload,沒有太多的運氣。
崩潰: AKA運行時錯誤。
在Visual Basic 6.0(VB6)中的一個小問題如果應用程序崩潰,執行代碼?
假設我錯過了一種可能的情況,並且用戶做了一些事情並沒有想到,那麼他會得到一個錯誤,導致應用程序崩潰。有沒有我可以使用的事件會執行某些代碼,如果發生這種情況?
嘗試Form_Terminate \ Unload \ Query_Unload,沒有太多的運氣。
崩潰: AKA運行時錯誤。
您可以在任何級別添加On Error
支票,包括您的Sub Main
。任何未在該功能級別進行錯誤檢查的錯誤將通過調用堆棧上升到主/初始方法,您可以在那裏捕獲它們。
然後,您可以優雅地顯示錯誤(以便您或您的用戶知道它),然後在此時恢復任何最佳方法。而且,請記住,您可以在幾個不同的戰略級別和位置執行此操作。
如果錯誤發生在事件過程中,那麼這些錯誤不會被困在Sub Main()
中,因此您還需要在那裏捕獲它們。
任何出現在堆棧頂部的錯誤(出自Sub Main()
或事件過程)都將被運行時捕獲並且是致命的。您的代碼將不會收到通知。
您可能也希望發佈Good Patterns For VBA Error Handling。
關於在VB6中頻繁捕獲錯誤的方法是通過使用On Error
和GOTO
標籤。在每個函數開始時,只要在出錯時聲明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
我假設在碰撞事件日誌中沒有條目? – rene 2014-09-03 15:37:18
如果沒有其他選項是可行的,可以查看http://msdn.microsoft.com/en-us/library/windows/hardware/dn641144.aspx。 – rene 2014-09-03 15:39:03
崩潰=運行時錯誤。雷內,我已經知道如何處理錯誤,即時通訊談論更大的規模,而不是具體的捕捉。 (我總是可以在'錯誤轉到X'或上帝禁止'錯誤恢復下一個'(又名磁帶檢查引擎燈)',但如果該錯誤來自另一段代碼,我應該掃描錯誤並把它放在我編碼的每一個事件上? – Stavm 2014-09-03 15:42:46