2011-03-07 79 views
2

我正在維護一個vb6項目(ActiveX DLL)。在調試時,該應用程序運行到下面的函數:VB6調試 - 不會去錯誤處理代碼

Public Function HasValue(ByVal vValue) As Boolean 

    On Error GoTo Err 

    If IsMissing(vValue) Then 
     HasValue = False 
    ElseIf IsNull(vValue) Or Len(vValue) = 0 Then 
     HasValue = False 
    ElseIf isEmpty(vValue) Then 
     HasValue = False 
    Else 
     HasValue = True 
    End If 

Exit Function 

Err: 

    If IsArray(vValue) Or IsObject(vValue) Then 
     HasValue = True 
    Else 
     HasValue = False 
    End If 
End Function 

並停止在該行

elseif的ISNULL(VVALUE)或者LEN(VVALUE)= 0然後

VVALUE是一個自定義對象,包含一些屬性(顯然,不是null)。

雖然我沒有在那裏放置任何中斷點,但應用程序停在那裏,並提醒錯誤對話框說「運行時錯誤'438':對象不支持此屬性或方法」。

我們有錯誤處理代碼,但應用程序沒有運行到錯誤處理代碼。它只是停在導致錯誤的行上,我不得不停止應用程序。

你對此有什麼想法嗎? 非常感謝。

+1

何:拆除部分'或者萊恩(VVALUE)= 0',然後嘗試。 – Mudassir 2011-03-07 04:31:49

+0

關於這個問題有幾件事會混淆這個問題。 1.它使用'IsMissing',但'vValue'沒有聲明爲'Optional'。 'IsMissing'用於檢測沒有傳遞給方法的'Optional Variant'參數。 2.你的意見說'vValue'是一個對象,但代碼使用'IsNull'和'Len'來測試它。對象引用使用'Is Nothing'進行測試。這段代碼是逐字地發佈的,還是被模糊了? – JeffK 2011-03-07 15:44:33

+0

是的,代碼是從我維護的應用程序逐字複製的。我對開發者實施的方式感到非常驚訝。無論如何,請忽略此處的邏輯。我只是想知道爲什麼應用程序不會遇到錯誤處理代碼。謝謝 – nobitavn94 2011-03-09 06:21:46

回答

6

只要讓彈出窗口在調試器中運行,它可能與IDE中的「錯誤陷阱」設置有關。轉到工具 - >選項 - >常規,看看在「錯誤陷印」下選擇了什麼。乍一看,您的錯誤處理程序在發生錯誤時正在測試vValue,這似乎很奇怪。基於我對這種方法的有限理解,將IsArray和IsObject條件轉移到主測試邏輯中對我來說更有意義。只是我的2美分:)

+0

+1也將Len測試移動到例程的末尾 – MarkJ 2011-03-07 09:07:36

+0

您也可以通過在代碼窗口中右鍵單擊,然後查看彈出菜單上的「Toggle」項來檢查錯誤陷印設置。 – JeffK 2011-03-07 15:48:20

0

據我所知VB6不支持布爾較短的評估

ElseIf IsNull(vValue) Or Len(vValue) = 0 Then 

所以Len(vValue) = 0執行即使IsNull(vValue)是真實的。

改變你的代碼

... 
ElseIf IsNull(vValue) Then 
    HasValue = False 
ElseIf Len(vValue) = 0 Then 
    HasValue = False 
ElseIf ... 

可能會解決這個問題