none
別プログラムから起動されるプログラムへのアタッチ方法 RRS feed

  • 質問

  • いつもお世話になっています。
    開発環境はVS2010です。

    下記の2つのプログラム(EXE)を作っています。
    (1)プログラムA … .NET2.0(C#)で作ったEXE
    (2)プログラムB … C++で作ったネイティブWindowsアプリ

    プログラムBは、プログラムAからProcessStartInfoを使って
    パラメータを渡して起動するという作りになっています。
    ここで、プログラムBの起動時の初期化処理をVisualStudioのブレークポイントを
    使ってデバッグ実行したいのですが、どのような方法が簡単でしょうか。

    プログラムAはVS上で直接デバッグ実行すれば問題ありません。
    プログラムBはVSからの起動ではないので、起動後にVSから「プロセスにアタッチ」を
    して、ブレークポイントを使ったりしています。
    しかし、手動でこれをやっている間に初期化処理が終わってしまうので、
    初期化処理の最初にMessageBox等を呼んで処理をブロックし、その間にアタッチする、
    という方法で対処しています。

    一応これで目的は達せているのですが、わざわざMessageBox等のコードを追加するのが煩雑です。
    他にもっと良い方法は無いでしょうか。
    よろしくお願い致します。
    2012年4月12日 2:54

回答

  • プログラムのソースコードを編集できるようでしたら、DebugBreak__debugbreak関数があります。ちなみに.NET FrameworkですとDebugger.Breakメソッドです。

    あくまでこれらの関数・メソッドを呼び出した際にデバッガーにアタッチされるわけですから、例えばコマンドラインオプションで分岐したり、もしくはデバッグビルドの時のみ有効にしたり、呼び出さないようにする手段はさまざまです。

    • 回答としてマーク femp 2012年4月12日 10:19
    2012年4月12日 2:59

すべての返信

  • プログラムのソースコードを編集できるようでしたら、DebugBreak__debugbreak関数があります。ちなみに.NET FrameworkですとDebugger.Breakメソッドです。

    あくまでこれらの関数・メソッドを呼び出した際にデバッガーにアタッチされるわけですから、例えばコマンドラインオプションで分岐したり、もしくはデバッグビルドの時のみ有効にしたり、呼び出さないようにする手段はさまざまです。

    • 回答としてマーク femp 2012年4月12日 10:19
    2012年4月12日 2:59
  • 試した事無いのでひょっとしてレベルですが、プログラム A, B が同じソリューションに登録されているプロジェクトなら、ソリューションのプロパティの「スタートアッププロジェクト」で「マルチスタートアッププロジェクト」で

    • プログラムA=開始
    • プログラムB=なし

    に設定すると希望の動作をしたりしないでしょうか。

    2012年4月12日 5:46
  • > 佐祐理さん
    とても便利なものを教えて頂きました。
    助かりました。
    ありがとうございます。

    > 渋木宏明さん
    ありがとうございます。
    ですが、それぞれのプログラムは別々のソリューションなので、
    教えて頂いた方法は今回は使えませんでした。

    2012年4月12日 10:19
  • 子プロセスのデバッグって、いつのまにか無くなりましたね。vs2003 ぐらいからかしら?

    別の方法を2つぐらい。

    1. JIT デバッガを使う
    2. 自動デバッグを使う

    どっちも OS の機能で、開発をサポートするものです。

    前者は、Visual Studio をインストールした時に JIT デバッガとして設定するかどうか聞かれたと思いますが、JIT デバッガとして登録している場合、Ctrl+Break または F12 キーを押すだけでフォアグラウンドプロセスに対してデバッガをアタッチできます。

    後者は、アプリケーションを指定しておくことで、起動時に自動的にデバッグを開始するものです。http://msdn.microsoft.com/en-us/library/a329t4ed.aspx こちらに設定方法が書かれています。

    2012年4月14日 23:05
  • 子プロセスのデバッグ機能なんてのがあったのですか…知りませんでした。参考になります。

    Windows API的にはデバッガーに対してデバッグ対象プロセスが子プロセスを作成しようとしていることをイベント通知されるので、後はデバッガーがそれをどう処理するかだけの話しなんですけどねぇ…。

    2012年4月15日 0:22