2010-04-16 2 views
1

Так что я отлаживаю некоторые веб-сайты (один из туловища, один из ветки), выполняемый локально, в отдельных приложениях. У меня есть решения для соединительных линий и ветвей, открытых в двух экземплярах VS. Я хотел бы отлаживать багажник в одном, а другой - в другом. Я хотел бы знать, есть ли способ узнать, какой пул приложений работает каждый w3wp.exe, чтобы узнать, какой из них при прикреплении отладчика.В VS2010 есть ли способ узнать, какой пул приложений используется для данного w3wp.exe, а затем принять решение подключить отладчик?

Обновление: точка в этом состоит в том, чтобы написать макрос в VS, чтобы затем дать мне кнопку (для интересного приложения), который будет доступен для прикрепления отладчика. Поэтому решения не должны включать другие программы.

Update2: это на Windows 7 против IIS7.

ответ

1

Другим вариантом будет WADA - W3WP Advanced Attacher, доступный в галерее Visual Studio. Я нашел его, выполнив поиск в Online Gallery of Extension Manager для «attach worker».

+0

Это замечательно; благодаря! –

0

Если вы можете выполнить запрос в каждой ветви, вы можете использовать что-то вроде Process Explorer или диспетчер задач, чтобы узнать, какой идентификатор, по возможности, может занимать циклы ЦП, которые в настоящее время обрабатывают запрос, предполагая, что вы можете получить такое разделение ,

1

Посмотрите на ответы на это question. Есть встроенные скрипты, которые вы можете запустить из командной строки, чтобы сделать это.

4

Ниже приводится мой основной макрос. Напишите несколько однострочных подписчиков, называющих это, например, AttachToW3wp("DefaultAppPool"), называя каждый интересующий вас пул приложений и создавая для них кнопки и горячие клавиши.

Private Sub AttachToW3wp(ByVal appPoolName As String) 
    Const processName As String = "w3wp.exe" 
    Dim userName As String = String.Format("IIS APPPOOL\{0}", appPoolName) 

    Try 
     Dim debugger As EnvDTE90.Debugger3 = CType(DTE.Debugger, EnvDTE90.Debugger3) 
     'debugger.DetachAll() 

     Dim transport As EnvDTE80.Transport = debugger.Transports.Item("Default") 
     Dim qualifier As String = Environment.MachineName '= My.Computer.Name 
     Dim engines(3) As EnvDTE80.Engine 
     engines(0) = transport.Engines.Item("Managed") 
     engines(1) = transport.Engines.Item("Script") 
     engines(2) = transport.Engines.Item("T-SQL") 

     Dim successMessage As String = String.Empty 
     For Each process As EnvDTE80.Process2 In debugger.GetProcesses(transport, qualifier) 
      With process 
       Dim fi As New System.IO.FileInfo(.Name) 
       If fi.Name = processName AndAlso (String.Compare(.UserName, 0, userName, 0, Len(userName), True) = 0) Then 
        If .IsBeingDebugged Then Throw New Exception(String.Format("{0} {1} is already attached to a debugger.", processName, userName)) 

        process.Attach2(engines) 
        successMessage = String.Format("Attached to {0} for {1} ({2})", processName, userName, .ProcessID) 

        Exit For 
       End If 
      End With 
     Next 

     If successMessage = String.Empty Then 
      Throw New Exception(String.Format("{0} {1} not found.", processName, userName)) 
     Else 
      Trace.WriteLine(successMessage) 
     End If 

    Catch ex As System.Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 
-1

Вы можете использовать менеджер задач для просмотра имя пользователя, под которым запущен процесс (который в целом такой же, как имя пула приложений) и идентификатор процесса, но вы должны включить эти столбцы в диспетчер задач, а также имя процесса должно быть таким же, как пул приложений (по умолчанию это значение по умолчанию).
Также обратите внимание, что все методы, перечисленные на этой странице, могут отображать только те процессы, которые в настоящее время запущены, а это означает, что если ваш конкретный процесс отключился из-за простоев, вы должны сначала использовать сайт, чтобы привести процесс в список, и в вашем случае это означает, что вы должны сначала получить доступ ко всем сайтам, чтобы убедиться, что процесс, связанный с ними, запускается.