VB6メモ:デバッグ中か否か

VB6ではデバッグ中か否かを判断するものが用意されていないようです。
しかし、これではデバッグの場合に処理を分けたいことがある場合に困ってしまいます。

特に、Win32APIのSetWindowLong()でコントロールのサブクラス化している場合、
デバッグの中断をするとVBごと落ちてしまう為、その防止の為にもデバッグの判断は大事かと思います。

デバッグ中か否かをチェックする方法についてメモしておきます。


'機能:デバッグ中か否か
'戻値:True:デバッグ中
Private Function isDebug() As Boolean
    Dim wRet As Boolean
On Error GoTo proc_err
    wRet = False
    '---------------------------------
    Debug.Print 1 / 0
    '---------------------------------
    GoTo proc_end
proc_err:
    wRet = True
proc_end:
    isDebug = wRet
End Function

上記の通り、ソース自体は単純です。

Debug.Print()はデバッグ時にイミディエイトウィンドウに文字列を出力する関数です。
つまりデバッグでない場合はこの処理は無視されるということになります。
(無視というよりはコンパイル時に除外されると言う方が正しいかも?)

このため、Debug.Print()でエラーでない場合は、デバッグ中ではないと判断できます。
逆に、Debug.Print()でエラーとなった場合は、デバッグ中であると判断できます。

上記では0の除算エラーを発生させて判断していますが、
「Debug.Print "a" = 0」等、型の不一致でも判断できそうです。

ちなみに、Debug.Assert内でも同様に使えるようです。


コメント
コメントする








    
この記事のトラックバックURL
トラックバック