Отладка приложений



         

Обзор операторов утверждений для Visual C++ и Visual Basic - часть 9


CallAssert vntiExpression, 7, sMsg 

End Sub

Private Sub CallAssert{ByVal vntiExpression As Variant, _

ByVal iOpt As Long,

 _ sMsg As String)

 If (vntiExpression) Then

Exit Sub Else

' Следующий флажок используется, чтобы определить, вызывалась ли

 ' уже функция InDesign. Вызывать эту функцию повторно нет 

' необходимости.

Static bCheckedDesign As Boolean 'False по умолчанию. 

' Флажок, разрешающий остановки, я пересылаю в DiagAssertVB.

 ' Если этот флажок установлен в 1, то DiagAssertVB разрешит 

' останавливать приложение. Если этот флажок установлен в 0, 

' приложение выполняется в VB IDE так, что DiagAssertVB не будет

 ' разрешать остановки. Если пользователь запускается 

' внутри VB IDE, то прерывание довольно опасно и может погубить 

' весь ваш дневной труд! 

Static lAllowHalts As Long 

' Вызвать InDesign только раз.

 If (False = bCheckedDesign) Then 

If (True = InDesign()) Then

lAllowHalts = 0 

Else

lAllowHalts = I 

End If

bCheckedDesign = True

 End If

Dim IRet As Long

IRet = DiagAssertVB(iOpt, lAllowHalts, sMsg)

 If (I = IRet) Then

' Пользователь .хочет прервать выполнение. Однако

 ' прерывание не разрешается, если выполнение 

' происходит внутри VB IDE.

If (1 = lAllowHalts) Then

DebugBreak

 End If

 End If 

End If 

End Sub

'''''''''''''''''''''''''''''''''''''''''

' Эта замечательная функция взята из превосходной главы Пита Морриса "On

' Error GoTo To Hell" (с.25,26 в "Advanced Microsoft Visual Basic 6.0")

' InDesign позволяет проверять, выполняетесь ли вы в VB IDE. Я благодарен

' Питу, разрешившему мне использовать эту функцию!

'''''''''''''''''''''''''''''''''''''''

Public Function InDesign() As Boolean

' Я оставлю только один комментарий Пита — он превосходен.

' Только для этого и нужен Debug.Assert!

Static nCallCount As Integer

Static bRet As Boolean ' По умолчанию этот флажок False.

nCallCount = nCallCount + 1

Select Case nCallCount

Case 1: ' Первый вход (выполнение Debug.Assert)

Debug.Assert InDesign() Case 2: ' Второй вход, когда Debug.Assert уже выполнен

bRet = True

 End Select

' Если был вызван Debug.Assert, возвратить True, 

' чтобы предотвратить ловушку. 

InDesign = bRet

' Переустановить счетчик для будущих вызовов. 

nCallCount = 0

 End Function




Содержание  Назад  Вперед