В Visual Studio есть удобная возможность присоединяться к запущенному процессу (Tools — Attach to Process...) во время отладки. Удобная до тех пор, пока не приходится делать это с завидной регулярностью, тогда выбор нужного процесса из открывшегося списка становится крайне утомительным. Именно поэтому возникает желание автоматизировать эти нехитрые действия.
Рассмотрим решение на примере Visual Studio 2010, для других версий принципиальных различий нет.
1. Сначала в Macro Explorer (Tools — Macros — Macro Explorer) создадим новый модуль AttachToProcess.
2. В коде модуля добавим функцию присоединения к процессу с параметром ProcessName.
3. Добавим метод, который будет использоваться в дальнейшем для вызова из Visual Studio. В нем задается имя процесса.
Итоговый код модуля.
Можно запустить макрос вручную и проверить, что все работает как надо.
4. Добавим тулбар для кнопки вызова макроса (View — Toolbars — Customize...).
5. Добавляем кнопку (команду). Макросы находятся в категории Macros, как это ни удивительно.
Теперь у нас есть панель с кнопкой быстрого присоединения к процессу.
6. Последний штрих. Назначаем комбинацию клавиш для запуска макроса.
Вуаля! Отныне вызвать Attach к нужному процессу можно в один клик мышкой или с помощью горячих клавиш.
Рассмотрим решение на примере Visual Studio 2010, для других версий принципиальных различий нет.
1. Сначала в Macro Explorer (Tools — Macros — Macro Explorer) создадим новый модуль AttachToProcess.
2. В коде модуля добавим функцию присоединения к процессу с параметром ProcessName.
Public Function AttachToProcess(ByVal ProcessName As String) As Boolean
Dim success As Boolean
success = True
Try
Dim debugger As EnvDTE80.Debugger2 = DTE.Debugger
Dim transport As EnvDTE80.Transport = debugger.Transports.Item("Default")
Dim name As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name
name = name.Substring(0, name.IndexOf("\"))
Dim process As EnvDTE80.Process2 = debugger.GetProcesses(transport, name).Item(ProcessName)
process.Attach()
Catch ex As System.Exception
success = False
End Try
Return success
End Function
3. Добавим метод, который будет использоваться в дальнейшем для вызова из Visual Studio. В нем задается имя процесса.
Sub AttachToW3WP()
If Not AttachToProcess("w3wp.exe") Then
System.Windows.Forms.MessageBox.Show("Cannot attach to process")
End If
End Sub
Итоговый код модуля.
Public Module AttachToProcess
Public Function AttachToProcess(ByVal ProcessName As String) As Boolean
Dim success As Boolean
success = True
Try
Dim debugger As EnvDTE80.Debugger2 = DTE.Debugger
Dim transport As EnvDTE80.Transport = debugger.Transports.Item("Default")
Dim name As String = System.Security.Principal.WindowsIdentity.GetCurrent().Name
name = name.Substring(0, name.IndexOf("\"))
Dim process As EnvDTE80.Process2 = debugger.GetProcesses(transport, name).Item(ProcessName)
process.Attach()
Catch ex As System.Exception
success = False
End Try
Return success
End Function
Sub AttachToW3WP()
If Not AttachToProcess("w3wp.exe") Then
System.Windows.Forms.MessageBox.Show("Cannot attach to process")
End If
End Sub
End Module
Можно запустить макрос вручную и проверить, что все работает как надо.
4. Добавим тулбар для кнопки вызова макроса (View — Toolbars — Customize...).
5. Добавляем кнопку (команду). Макросы находятся в категории Macros, как это ни удивительно.
Теперь у нас есть панель с кнопкой быстрого присоединения к процессу.
6. Последний штрих. Назначаем комбинацию клавиш для запуска макроса.
Вуаля! Отныне вызвать Attach к нужному процессу можно в один клик мышкой или с помощью горячих клавиш.