web-dev-qa-db-ja.com

デバッグモードでVB 6?

VB 6で次のCコードのようなことをするにはどうすればよいですか?

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

それはあなたが慣れている他の言語とほとんど同じです。構文は次のようになります。

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

構文がVB 6の他のフロー制御ステートメントとまったく同じであることを覚えていれば、コンパイル時の条件文がポンド記号(#)。

秘訣は、実際にはDEBUG(またはその他)定数を定義することです。これは、デフォルトで定義されている定数がないと確信しているためです。それを行うには2つの標準的な方法があります。

  1. 使用 #Constキーワードを使用して、各ソースファイルの先頭に定数を定義します。この方法で確立した定義は、ソースモジュール全体で有効です。次のようになります。

     #Const DEBUG = 1
    
  2. プロジェクトのプロパティで定数を設定します。これにより、プロジェクト全体で有効な定数が定義されます(おそらく、「デバッグ」モードインジケーターに必要な定数です)。

    これを行うには、[プロジェクトのプロパティ]ダイアログボックスの[作成]タブにある[条件付きコンパイル定数]テキストボックスに次のように入力します。

     DEBUG = 1
    

    このダイアログで複数の定数を定義するには、それぞれをコロン(:):

     DEBUG = 1 : VERSION2 = 1
    

notが定義されている定数は、0と見なされることに注意してください。

35
Cody Gray

コーディは条件付きコンパイルについてあなたに話しました。 IDEでデバッグするときに別の動作が必要な場合は、追加したいと思います(たとえば、IDEがエラーをトラップするように独自のエラー処理をオフにする)条件付きコンパイルは必要ありません。このように実行時にIDE)を検出できます。

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

これは、コンパイルされたEXEでDebug.Printが省略されているために機能します。

  • [〜#〜] edit [〜#〜]オンエラー再開をオフにすることを忘れないでください!
  • [〜#〜] edit [〜#〜]チェックを this のような関数でラップできます(CraigJに感謝)
10
MarkJ

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内から実行している場合、関数を呼び出すための余分なオーバーヘッドが発生します(これは途方もなく小さいです)。コンパイルすると、これは単純な数値比較に評価されます。

7
George Mastros

これは私の短くて安定したコードです。複雑になるたびに変更する必要がないため、条件付き定数よりも優れていると思います。

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