デバッグ実行について への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 るきお  (社会人)
投稿日時
2009/3/13 21:46:46
魔界の仮面弁士さんとかぶりました。
>なにか私が見落としているもっといいやり方を知っている人は教えてください。
Debugger.IsAttached
これですね。
存在に気がついていませんでした。ありがとうございます。
>FORZAさん
前の私の投稿のホスティングプロセス云々の部分はまるごと無視してください。
>なにか私が見落としているもっといいやり方を知っている人は教えてください。
Debugger.IsAttached
これですね。
存在に気がついていませんでした。ありがとうございます。
>FORZAさん
前の私の投稿のホスティングプロセス云々の部分はまるごと無視してください。
投稿者 るきお  (社会人)
投稿日時
2009/3/13 21:42:57
こんにちは。
ちょっと違いますが、開発環境から実行するときはDebugモード、exeを直接実行するときはReleaseモード(つまり、Releaseモードでビルドしたものを実行する)と使い分ければ、
これで目的を達成できませんか?
>プログラムが現在デバッグ実行中なのか、
>または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
デバッグ実行でも実行可能ファイル(exeファイル)が実行されています。
また、実行可能ファイルを直接起動しても、後からプロセスをアタッチしてデバッグすることも可能で、
厳密にデバッグ中かどうか判断するのは難しいかなと思っています。
既定の設定であれば次のような手段もあります。
これは、VB2005以上の場合、既定の設定でVisual Studio上で実行するときはホスティングプロセスを使用していることを利用しています。
この設定はプロジェクトの設定でデバッグページにある「Visual Studio ホスティングプロセスを有効にする」です。通常はオンになっています。
なにか私が見落としているもっといいやり方を知っている人は教えてください。
ホスティングプロセスで判断する方法は今後のバージョン等については何の保証もないので#DEBUGで目的を達成できるのであれば#DEBUGをお奨めします。
ちょっと違いますが、開発環境から実行するときはDebugモード、exeを直接実行するときはReleaseモード(つまり、Releaseモードでビルドしたものを実行する)と使い分ければ、
これで目的を達成できませんか?
Private Sub Button1_Click(ByVal sender As System.Object, ByVal 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.Object, ByVal 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:38:03
> 初歩的な質問で恐縮です。
何をもって初歩的と判断することになるのかが気になりますが、それはさておき。
> プログラムが現在デバッグ実行中なのか、
> または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
Visual Studio からの実行なのか、EXE そのものを単体で起動したのかの判定ならば、
「Debugger クラスの IsAttached プロパティ」を試してみてください。
そうではなく、DEBUG ビルドと RELEASE ビルドを判定したいという意味であれば、
「Conditional 属性」または「#If ディレクティブ」を利用することができるかと思います。
何をもって初歩的と判断することになるのかが気になりますが、それはさておき。
> プログラムが現在デバッグ実行中なのか、
> または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
Visual Studio からの実行なのか、EXE そのものを単体で起動したのかの判定ならば、
「Debugger クラスの IsAttached プロパティ」を試してみてください。
そうではなく、DEBUG ビルドと RELEASE ビルドを判定したいという意味であれば、
「Conditional 属性」または「#If ディレクティブ」を利用することができるかと思います。
投稿者 FORZA  (社会人)
投稿日時
2009/3/13 20:44:07
初歩的な質問で恐縮です。
現在、VB2008にてフォームアプリケーションを作成していますが、
プログラムが現在デバッグ実行中なのか、
または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
デバッグ時のコマンドライン引数を設定することで上記が可能であることは
確認済みですが、できればそのような設定をしなくても調べられる方法があれば
教えて頂きたいと思います。
よろしくお願いします。
現在、VB2008にてフォームアプリケーションを作成していますが、
プログラムが現在デバッグ実行中なのか、
または実行可能ファイルそのものの実行中なのかを調べる方法はありますか?
デバッグ時のコマンドライン引数を設定することで上記が可能であることは
確認済みですが、できればそのような設定をしなくても調べられる方法があれば
教えて頂きたいと思います。
よろしくお願いします。
説明不足ですみません。VSからのデバッグ中か、EXE単体での実行中かということです。
Debugger.IsAttachedで見事に解決することができました。
どこかにそういったことを判断できるプロパティやメソッドがあるはずだと
思って「初歩的な~」と書かせていただきましたが、
こんなに短いコードでできるとは意外でした。と同時にもうちょっと念入りに
ヘルプ等で探していれば見つかったんじゃないかと反省です。
どうもありがとうございました。