プログラム側からデバッガに接続する方法

このQ&Aのポイント
  • Visual Studioで起動しているプロセスに接続してデバッグする方法について教えてください。
  • Visual Studioの「プロセスにアタッチ」とは逆方向の方法で、起動しているプロセスからVisual Studioに接続してデバッグ中にする方法はありますか?
  • Visual StudioのAPIやその他の方法を使用して、プログラム側からデバッガに接続する処理を埋め込みたいです。手動での操作はNGです。
回答を見る
  • ベストアンサー

プログラム側からデバッガに接続する方法

カテゴリがちょっと違うかも知れませんが適当なのがなかったので、ここで質問させてください。 Visual Studioで「プロセスにアタッチ」というのを使うと既に起動しているプロセスをデバッグ可能な状態にできますが、その逆をする方法はありませんか? つまり、起動しているプロセス側からVisual Studioに接続してデバッグ中にしたいのです。そういうことを行うAPIやその他方法があれば、そのプロセス側となるソフトにそういう処理を埋め込みたいと考えています。 なお、Visual Studioを手動で操作して「デバッグ開始」する方法はNGです。 Visual Studio側は先に起動しているものとします。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • davidfox
  • ベストアンサー率58% (21/36)
回答No.2

No.1です。 ○WinXP(32bit) >先に起動しているVisual Studioを... う~ん、望みを叶えるには面倒な細工が必要かも知れません。 何しろ Visual Studio は複数起動できるし、統合環境なので色々な状態を持っているので... その辺を解決した自前の処理やマクロが用意できれば、レジストリに登録してある vsjitdebugger.exe の代わりにすれば良い気がします(vsjitdebuggerについてはググると幾つも見つかります)。 ○Win7(64bit) 触れた事が無いので正確性を欠きますが、URLのような説明があります。  図3の後の "3 つ目の方法は Just In Time (JIT) デバッグを使用する方法で..." と書いてある部分です。 見ると、オンライン解決策が標準なので、それを無効化しなければならないように思えます。

参考URL:
http://msdn.microsoft.com/ja-jp/library/ff951239.aspx
haniriito
質問者

お礼

返事が遅くなってすみません。 >>先に起動しているVisual Studioを... >う~ん、望みを叶えるには面倒な細工が必要かも知れません。 >何しろ Visual Studio は複数起動できるし、統合環境なので色々な状態を持っているので... 「デバッグしますか?」ダイアログに先に起動しているVisual Studioのインスタンスが出てきていれば、その中から選択するくらいの手動操作は入ってもよかったのですが。。。 > 図3の後の "3 つ目の方法は Just In Time (JIT) デバッグを使用する方法で..." ありがとうございます。こちらの情報は参考になりました。 「レポートから除外するプログラム」に指定することによって、「デバッグしますか?」ダイアログは出るようになりました。 結局、その後Visual Studio側からプロセスにアタッチする操作が必要になるのですが、とりあえずその方法で当面はやり過ごすことにします。

その他の回答 (1)

  • davidfox
  • ベストアンサー率58% (21/36)
回答No.1

>Visual Studioを手動で操作して「デバッグ開始」する方法はNG... ここは希望に添うか微妙ですが、処理を中断してデバッガに接続するように仕向ける、という方法なら DebugBreak(); を任意の位置で呼べば、デバッガを催促できます。 デバッグを始めるまで、OSや環境の設定によって多少違いがあると思いますが...

haniriito
質問者

お礼

ありがとうございます。 試してみたところ次のようになりました。 ○WinXP(32bit)   確かにDebugBreak()でダイアログが出て、「デバッグするか?」どうかを訊いてきました。   しかし、新しいVisual Studioのインスタンスをデバッガとして起動しようとします。そうではなくて、先に起動しているVisual Studioをデバッガとしてアタッチして欲しいのですが・・・ ○Win7(64bit)   DebugBreak()を呼び出しても、何も起きませんでした。   タスクマネージャで見ているとそのプロセスはDebugBreak()呼び出し後2~3秒間は生きているようですが、その後タスクマネージャからスッと消えるだけでWinXPのときのような「デバッグしますか?」ダイアログが出ないです。 とにかくありがとうございました。 他に何か方法があればお願いします。

関連するQ&A

  • VC++6.0 「プロセスへアタッチ」でのデバッグについて

    VC++6.0(SP3)を使っています。 プロセスにアタッチしてデバッグする方法があります。 ・「ビルド」→「デバッグの開始」→「プロセスへアタッチ」 通常、この方法で現在動作しているプロセスの一覧が表示されるはずなのですが、 全く表示されなくて困っています。 原因、アドバイスなど、何かご存知の方がいればご教授願います。

  • Visual Studio リモートデバッグについて

    Visual StudioのPro/Teamはリモートデバッグができるとあるのですが、MSDNを見てもリモートデバッグが具体的にどういうものか理解できていません。 デバッグ対象はC++で書いたコードや.net C#で書いたコードです。 2台コンピューターを用意して一方のプログラムをデバッグしながら制御ができるということでいいのでしょうか? また、Virtual PC上のプログラムにアタッチするというようなことも可能なのでしょうか? 普通のデバッグと操作上や機能上の違いはあるのでしょうか? 普段Visual Studioでデバッグする時のようにステップ実行やアセンブラ表示、レジスタの様子、メモリーの様子、変数の様子など見れるのでしょうか?もし可能なら次買う時はProを検討したいのですが。 デバッグしている様子などサイトを探したのですが見つからずイメージができないので、詳しい方いましたら教えていただけると助かります。

  • 花子2007体験版をインストール中に、「選択したデバッガでデバッグしますか?」と出てインストールできません・・・

    花子2007体験版をインストールしている最中に、 「acrodist.exe [5316] でハンドルされていない Win32 の例外が発生しました」 というメッセージが出ました。 また、 「新しいインスタンス Visual Studio2005」 というものだけが選択肢として出ています。 ・「現在選択されているデバッガを規定のデバッガに設定する」 ・「デバッグエンジンを手動で選択する」 というチェックボックス型のところが出ています。 そして、 「選択したデバッガでデバッグしますか?」 というメッセが出て止まっています。 「はい」なのか「いいえ」なのか、いったいどうすればいいのでしょうか?

  • 子プロセスのデバッグ方法について

    VisualStudio2008のVCでデバッグをしています。 Win32のCreateProcess関数で"自分自身"のEXEファイルを実行すると、新プロセスが起動するのですがデバッグができません。 CreateProcessの呼び出し側プロセスと、同じプログラムである新プロセスを同時にデバッグすることはできないものでしょうか。

  • Machine debug manager 無効

    Visual Studio .NETを使っているのですが 最近、「開始」「デバッグなしで開始」「ステップイン」などの機能を使うと 「デバッグを解しできません. Machine Debug Manager サービスは無効です」 という表示が出て機能を使うことができません。 オプション設定などを見てもどこをどういじればいいのかわかりませんでした。 使用しているVisual Studio .NETは 私の所属している学科がライセンス契約をしているので そこでインストールしたものです。 どうか対処法を知っている方はお教えください。

  • フックのタイミング

    SetWindowsHookEx(dllインジェクション)を使ってAPIフックを実装するdllを作っています。 そこそこ使えるレベルまで完成したのですが、どうしてもInit時のフックができません。 フック作動中に新しいプロセスが作られると、フックが実行されdllがアタッチされると思いますが、Init以前にアタッチさせることはできるのでしょうか? といってもダイアログのコンストラクタまで見たいわけではなく、WM_INITDIALOG時に呼ばれるAPIが見たいのです。WM_INITDIALOG以前にアタッチさせる方法はあるのでしょうか?

  • Windowsフォームを思通りにデバッグできない

    こんにちは。Visual Studio 2012を勉強しようとしていますが、さっそくつまずきました。 言語はC#で、Windowsフォームを作成しました。 WindowsフォームでForm1というフォームを作成。 F5のデバッグの開始で正しく実行されました。 次にソリューションエクスプローラーから追加で、Windowsフォームを追加しました。このフォームの名前をForm2にしました。 これでF5のデバッグの開始をクリックしたら、Form1が起動してきました・・・ Form2でデバッグの開始を行いたいのですが、どのように実行すればよいでしょうか?

  • >NETの起動方法

    Visual Studio 2008 ExpressのC#を使ってプログラムを作成した。 テスト、デバッグは済んだ。 このプログラムをVisual Studioを離れて(VSの管理下でない状態で)起動したい。 どうすればいいのでしょうか。 1.普通のEXEプログラムはイクスプローラでダブルクリックすれば動く。 2.JAVAのプログラムは仮想マシンを起動して、仮想マシンのパラメタとしてプログラム名を渡す。   JAVA プログラム名 3.C#の場合、どうすれば動くのか。.NETを起動して、そのパラメタとしてプログラム名を渡すんだと思いますが、.NETの起動方法がわかりません。 わかっている方がおりましたら、教えて下さい。

  • MediaPlayerの実行方法

    お世話になります。 Visual Studio 2005を用いてWinAPIの勉強をしています。 Win32 APIで WindowsMediaPlayerを起動するにはどうしたらいいのでしょうか? 例えば、メインウインドウを作成し、スタートボタンを作成して、 クリックすると指定しているファイルがWMPで再生する動作です。 Windowフォームでは、Process::Start("wmplayer.exe",ファイル名); を指定して動作しましたが、Win32アプリでは出来ません。 どうぞよろしくお願い致します。

  • VB2013で別のプロセスが使用中です。

    VB2013でデバックをすると 「操作を完了できませんでした。プロセスはファイルにアクセスできません。別のプロセスが使用中です。」 とメッセージがでます。 OKボタンを押して1度終了させ、再度デバッグを開始するとデバッグできます。 デバッグを終了させ、再度デバッグをするとメッセージがまた出ます。 またOKを押せばデバッグはできるのですが、結構煩わしいので何か対処する方法はないでしょうか? 以前は出てなかったのですが急に出るようになりました。 原因が何かわからないのでヒントでもあればと思い質問させてもらいました。

専門家に質問してみよう