デバッグ実行について

タグの編集
投稿者 FORZA  (社会人) 投稿日時 2009/3/13 20:44:07
初歩的な質問で恐縮です。

現在、VB2008にてフォームアプリケーションを作成していますが、
プログラムが現在デバッグ実行中なのか、
または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?

デバッグ時のコマンドライン引数を設定することで上記が可能であることは
確認済みですが、できればそのような設定をしなくても調べられる方法があれば
教えて頂きたいと思います。

よろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/3/13 21:38:03
> 初歩的な質問で恐縮です。
何をもって初歩的と判断することになるのかが気になりますが、それはさておき。

> プログラムが現在デバッグ実行中なのか、
> または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
Visual Studio からの実行なのか、EXE そのものを単体で起動したのかの判定ならば、
「Debugger クラスの IsAttached プロパティ」を試してみてください。

そうではなく、DEBUG ビルドと RELEASE ビルドを判定したいという意味であれば、
「Conditional 属性」または「#If ディレクティブ」を利用することができるかと思います。
投稿者 るきお  (社会人) 投稿日時 2009/3/13 21:42:57
こんにちは。

ちょっと違いますが、開発環境から実行するときはDebugモード、exeを直接実行するときはReleaseモード(つまり、Releaseモードでビルドしたものを実行する)と使い分ければ、
これで目的を達成できませんか?
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

#If DEBUG Then
        MsgBox("デバッグ実行中です")
#Else
        MsgBox("通常実行中です。")
#End If

    End Sub


>プログラムが現在デバッグ実行中なのか、
>または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
デバッグ実行でも実行可能ファイル(exeファイル)が実行されています。

また、実行可能ファイルを直接起動しても、後からプロセスをアタッチしてデバッグすることも可能で、
厳密にデバッグ中かどうか判断するのは難しいかなと思っています。

既定の設定であれば次のような手段もあります。
    Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click

        If IsInVisualStudio() Then
            MsgBox("Visual Studio上で実行されています。")
        Else
            MsgBox("直接実行されています。")
        End If

    End Sub

    Private Function IsInVisualStudio() As Boolean

        If AppDomain.CurrentDomain.FriendlyName.Contains(".vshost."Then
            Return True
        Else
            Return False
        End If

    End Function


これは、VB2005以上の場合、既定の設定でVisual Studio上で実行するときはホスティングプロセスを使用していることを利用しています。
この設定はプロジェクトの設定でデバッグページにある「Visual Studio ホスティングプロセスを有効にする」です。通常はオンになっています。

なにか私が見落としているもっといいやり方を知っている人は教えてください。

ホスティングプロセスで判断する方法は今後のバージョン等については何の保証もないので#DEBUGで目的を達成できるのであれば#DEBUGをお奨めします。

投稿者 るきお  (社会人) 投稿日時 2009/3/13 21:46:46
魔界の仮面弁士さんとかぶりました。

>なにか私が見落としているもっといいやり方を知っている人は教えてください。
Debugger.IsAttached

これですね。
存在に気がついていませんでした。ありがとうございます。

>FORZAさん
前の私の投稿のホスティングプロセス云々の部分はまるごと無視してください。

投稿者 FORZA  (社会人) 投稿日時 2009/3/13 22:48:08
魔界の仮面弁士さん、るきおさん、早速ありがとうございます。

説明不足ですみません。VSからのデバッグ中か、EXE単体での実行中かということです。

Debugger.IsAttachedで見事に解決することができました。
どこかにそういったことを判断できるプロパティやメソッドがあるはずだと
思って「初歩的な~」と書かせていただきましたが、
こんなに短いコードでできるとは意外でした。と同時にもうちょっと念入りに
ヘルプ等で探していれば見つかったんじゃないかと反省です。

どうもありがとうございました。