1

そのため、ローカルで実行されているいくつかのWebサイト(トランクから1つ、ブランチから1つ)を別々のアプリプールでデバッグしています。トランクソリューションとブランチソリューションを2つのVSインスタンスで開いています。一方でトランクをデバッグし、もう一方でブランチをデバッグしたいと思います。各w3wp.exeが提供しているアプリケーションプールを知る方法があるかどうか、デバッガーを接続するときにどれがどれであるかを知る方法があるかどうかを知りたいです。

更新:これのポイントは、VS内にマクロを記述して、デバッガーを接続するためにクリックできるボタン(興味深いアプリプールごと)を作成できるようにすることです。したがって、ソリューションには他のプログラムが含まれないことが望ましいです。

Update2:これはIIS7に対するWindows7です。

4

5 に答える 5

4

以下は私のコアマクロです。関心のある各アプリ プールに名前を付けるなど、それを呼び出す 1 行のサブルーチンをいくつか書き、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
于 2011-02-03T23:24:14.377 に答える
1

この質問に対する答えを見てください。これを行うためにコマンド ウィンドウから実行できる組み込みスクリプトがあります。

于 2010-04-16T16:05:48.803 に答える
1

もう 1 つのオプションは、Visual Studio ギャラリーで利用できるWADA - W3WP Advanced Attacherです。Extension Manager のオンライン ギャラリーで「attach worker」を検索して見つけました。

于 2012-02-24T16:49:49.803 に答える
0

If you can execute a request on each branch, you could use something like Process Explorer or Task Manager to see which ID is which possibly as one may be taking up CPU cycles that is currently processing a request assuming you can get such separation.

于 2010-04-16T16:03:54.427 に答える
-1

タスク マネージャーを使用して、プロセスが実行されているユーザー名 (通常はアプリケーション プール名と同じ) とプロセス ID を表示できますが、タスク マネージャーでこれらの列をオンにする必要があり、プロセスもオンにする必要があります。 name は、アプリケーション プールと同じでなければなりません (私の知る限り、これがデフォルトです)。
また、このページにリストされているすべての方法は、現在実行中のプロセスのみを表示する可能性があることに注意してください。つまり、アイドル時間のために特定のプロセスがシャットダウンした場合は、最初にサイトを使用してプロセスをリストに表示する必要があります。 、そしてあなたの場合、最初にすべてのサイトにアクセスして、それらに関連するプロセスが実行されていることを確認する必要があることを意味します.

于 2011-12-08T20:16:46.703 に答える