Режим отладки в VB 6? - PullRequest
       40

Режим отладки в VB 6?

23 голосов
/ 29 января 2012

Как я могу сделать что-то похожее на следующий код C в VB 6?

#ifdef _DEBUG_
    // do things
#else
    // do other things
#end if

Ответы [ 4 ]

35 голосов
/ 29 января 2012

Это почти то же самое, что и другие языки, к которым вы привыкли.Синтаксис выглядит следующим образом:

#If DEBUG = 1 Then
    ' Do something
#Else
    ' Do something else
#End If

Легко запомнить, если вы просто помните, что синтаксис точно такой же, как и другие операторы управления потоком в VB 6, за исключением того, что условные выражения времени компиляции начинаются сзнак фунта (#).

Хитрость заключается в определении константы DEBUG (или любой другой), потому что я почти уверен, что по умолчанию ее нет.Есть два стандартных способа сделать это:

  1. Используйте ключевое слово #Const, чтобы определить константу в верхней части каждого исходного файла.Определение, которое вы устанавливаете таким образом, действительно для всего исходного модуля.Это будет выглядеть примерно так:

     #Const DEBUG = 1
    
  2. Установите постоянную в свойствах проекта.Это определит константу, которая действительна для всего проекта (и, вероятно, это то, что вам нужно для индикатора режима «Отладка»).

    Чтобы сделать это, введите что-то вроде следующего в «Константы условной компиляции»текстовое поле на вкладке «Создание» диалогового окна «Свойства проекта»:

     DEBUG = 1
    

    В этом диалоговом окне можно определить несколько констант, разделив их двоеточием(:):

     DEBUG = 1 : VERSION2 = 1
    

Помните, что любая постоянная, которая не определена, предполагается равной 0.

10 голосов
/ 29 января 2012

Коди рассказал вам об условной компиляции. Я хотел бы добавить, что если вам нужно другое поведение при отладке в IDE (например, отключите собственную обработку ошибок, чтобы среда IDE перехватывала ошибки), вам не требуется условная компиляция. Вы можете обнаружить IDE во время выполнения, как это.

On Error Resume Next 
Debug.Print 1/0 
If Err=0 then 
  'Compiled Binary 
Else 
  'in the IDE 
End if

Это работает, потому что Debug.Print опущен в скомпилированном EXE.

  • РЕДАКТИРОВАТЬ Не забудьте отключить On Resume Next!
  • РЕДАКТИРОВАТЬ Вы можете обернуть чек в функции, такие как this (спасибо CraigJ)
7 голосов
/ 30 января 2012

Для достижения того же эффекта, что и у MarkJ, но с обработкой ошибок вы можете использовать следующий код.

Public Function GetRunningInIDE() As Boolean

   Dim x As Long
   Debug.Assert Not TestIDE(x)
   GetRunningInIDE = x = 1

End Function

Private Function TestIDE(x As Long) As Boolean

    x = 1

End Function

Когда вы работаете из среды IDE, возникают дополнительные издержки при вызове функции (что смехотворно мало). При компиляции это приводит к простому сравнению чисел.

2 голосов
/ 24 января 2016

Это мой короткий и стабильный код.Я думаю, что это лучше, чем условные константы, потому что вам не нужно менять их каждый раз, когда возникают сложности.

Public Function InIDE() As Boolean
  On Error Resume Next
  Debug.Print 0 / 0
  InIDE = Err.Number <> 0
End Function
...