В VS2010, есть ли способ узнать, какой пул приложений обслуживает данный w3wp.exe, чтобы затем решить присоединить отладчик? - PullRequest
1 голос
/ 16 апреля 2010

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

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

Обновление 2: это на Windows 7 против IIS7.

Ответы [ 5 ]

4 голосов
/ 04 февраля 2011

Ниже мой основной макрос. Напишите несколько однострочных подпрограмм, называющих его, например, 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 голос
/ 24 февраля 2012

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

1 голос
/ 16 апреля 2010

Посмотрите на ответы на этот вопрос . Для этого есть встроенные сценарии, которые вы можете запустить из командного окна.

0 голосов
/ 09 декабря 2011

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

0 голосов
/ 16 апреля 2010

Если вы можете выполнить запрос в каждой ветке, вы можете использовать что-то вроде Process Explorer или Диспетчер задач, чтобы увидеть, какой идентификатор, который, возможно, занимает процессор, который в данный момент обрабатывает запрос. при условии, что вы можете получить такое разделение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...