デバッグ中にVisual Studioで自動的に子プロセスにアタッチする
-
05-07-2019 - |
質問
メディアセンターのプラグインを作成する場合、プラグインは ehexthost.exe
でホストされます。このexeは ehshell.exe
から起動され、代わりに直接起動する方法はありません特別なパラメーターを ehshell.exe
に渡すと、別のプロセスでプラグインが起動します。
メディアブラウザをデバッグしているとき、 2番目の処理は不格好で、Debugger.Attachと特殊レジストリ使用できるエントリ。
これらの方法はどちらも私の法案にぴったりとは合いません。 F5を押して、Visual Studioの現在のインスタンスを子プロセスに自動的にアタッチさせます。これはできますか?
この機能を実現できるVS用のプラグインがあれば、それで満足です。
編集
次のマクロを使用することになりました:
Public Sub CompileRunAndAttachToEhExtHost()
DTE.Solution.SolutionBuild.Build(True)
DTE.Solution.SolutionBuild.Debug()
Dim trd As System.Threading.Thread = New System.Threading.Thread(AddressOf AttachToEhExtHost)
trd.Start()
End Sub
Public Sub AttachToEhExtHost()
Dim i As Integer = 0
Do Until i = 50
i = i + 1
Try
For Each proc As EnvDTE.Process In DTE.Debugger.LocalProcesses
If (proc.Name.IndexOf("ehexthost.exe") <> -1) Then
proc.Attach()
Exit Sub
End If
Next
Catch e As Exception
' dont care - stuff may be busy
End Try
Threading.Thread.Sleep(100)
Loop
End Sub
また、これを実行します。
解決
マクロを使用します。通常実行される長いビルド/検証の代わりに、asp.netプロセスにアタッチするようにF5関数を再定義しました。これは私にとって非常にうまく機能し、とても簡単です。
For Each process In DTE.Debugger.LocalProcesses
If (process.Name.IndexOf("aspnet_wp.exe") <> -1) Then
process.Attach()
Exit Sub
End If
Next
他のヒント
VS2012の場合、マクロは削除されましたが、標準のキーボードショートカットを使用すると、非常に迅速にマクロを実行できます。たとえば、iisexpress.exeに添付するには:
Ctrl + Alt + p -「プロセスにアタッチ」ダイアログが表示されます
i -リスト内のiで始まる最初のプロセスにジャンプします(私にとってはiisexpress.exeです)
Enter -添付
Lazy という名前の、私が作成したVisualStudioプラグインをチェックアウトします。
外部で生成されたプロセスでC ++プラグインをデバッグしていましたが、起動時に例外をスローすることでクラッシュしましたが、これは完全に機能しました:
無料の Visual Studioの拡張機能を再接続します。起動する前にプロセス名に再接続するように依頼します。プロセス名の起動を待機していることを示すモーダルダイアログが表示されます。
プロセスを起動すると、Visual Studioデバッガーがすぐにアタッチされ、例外をキャッチしてブレークポイントにヒットします。
(これもメディアプラグインにあり、例外は通常Delphiコンテキストのホストプロセスによってキャッチされ、再スローされたため、それが発生する前に中断する必要がありました。)
Visual Studioでそのようなものをセットアップした場合、F5を押すとプロセスに自動的にアタッチできます:
http://vvcap.net/db/ujYL7zeN_n_RgeprqCSM.htp
注意:「コマンド」があります;実行可能ファイル名として埋められ、「添付」 「はい」でなければなりません