4

いくつかのプロセスを生成するプログラムを作成しました。

既定では、Visual Studio は新しいプロセスをデバッグせず、新しいプロセスを作成した元のプロセスのみをデバッグします。

プロセスが作成されたときに、コードで Visual Studio をプロセスに自動的に接続する方法はありますか?

4

3 に答える 3

3

From: Visual Studio の CreateProcess で生成されたプロセスのデバッグ

一時的に、子プロセスのスタートアップ コードのどこかに DebugBreak() の呼び出しを入れることができます。これにより、そのプロセスをデバッグするかどうかを確認するメッセージが Windows から表示されます。

編集: 両方のプロジェクトが同じソリューション内にあるため、マルチプロジェクト デバッグ用に VS を構成します: (VS2010) [選択] でソリューション ノードをコンテキスト クリックSolution Explorer
します 。にSet Startup Projects...
Multiple startup projects
ActionStart

于 2012-03-13T16:35:23.130 に答える
2

これでもプロンプトが表示されますが、デバッガーがアタッチされます。

if (!Debugger.IsAttached && DebuggerFlagSet()) Debugger.Launch();

そして、親プロセスで

if(Debugger.IsAttached)
    SetDebuggerFlag()

ディスク/レジストリキー/ミューテックスなどのファイルなど、デバッガーフラグのメカニズムが必要になります。

起動されるデバッガーは、最初のインスタンスと同じではありません。

于 2012-03-13T16:46:07.087 に答える
1

これを行うには、VSアドインまたはVSパッケージを作成する必要があります。これは、バックグラウンドで子プロセスが読み込まれるのを待つ必要があるためです。

これがあなたがやりたいことの一般的なレシピです:

  1. debuggeeプロセスのIDを取得します(つまり、uint processID = DTE.Debugger.CurrentProcess.ProcessID
  2. System.Managementへの参照を追加し、このスレッドManagementEventWatcherで説明されているように、を使用して新しいプロセスの作成をリッスンします。クエリは次のようになります"SELECT ProcessID FROM Win32_ProcessStartTrace WHERE ParentProcessID = " + processID
  3. 新しい子プロセスがロードされたら、のprocessIDでそれを見つけてDTE.Debugger.LocalProcesses、それを呼び出します.Attach()
于 2012-03-14T15:19:57.157 に答える