2010-04-16 21 views
1

Je suis donc en train de déboguer certains sites Web (un du tronc, un de la branche) fonctionnant localement, dans des pools d'applications séparés. J'ai des solutions de tronc et de branche ouvertes dans deux instances VS. Je voudrais déboguer le tronc dans l'un et la branche dans l'autre. Je voudrais savoir s'il existe un moyen de savoir quel pool d'applications chaque w3wp.exe est en train de servir, pour savoir lequel est celui qui est attaché au débogueur.Dans VS2010, existe-t-il un moyen de savoir quel pool d'applications est utilisé par un w3wp.exe donné, pour ensuite décider d'attacher le débogueur?

Mise à jour: le but de ceci est d'écrire une macro dans VS pour ensuite me laisser un bouton (par app-pool qui est intéressant) qui sera cliquable pour attacher le débogueur. Les solutions ne devraient donc pas impliquer d'autres programmes.

Update2: c'est sur Windows 7 contre IIS7.

Répondre

1

Une autre option est la WADA - W3WP Advanced Attacher disponible dans la galerie Visual Studio. Je l'ai trouvé en cherchant dans la galerie en ligne du gestionnaire d'extension pour "attacher le travailleur".

+0

C'est génial; Merci! –

0

Si vous pouvez exécuter une requête sur chaque branche, vous pouvez utiliser quelque chose comme Process Explorer ou le Gestionnaire des tâches pour voir quel ID est le plus susceptible de traiter les cycles CPU qui traite actuellement une requête en supposant que vous pouvez obtenir une telle séparation .

1

Regardez les réponses à cette question question. Il existe des scripts intégrés que vous pouvez exécuter à partir d'une fenêtre de commande pour cela.

4

Voici ma macro principale. Écrivez quelques sous-marins d'une ligne qui l'appellent, comme AttachToW3wp("DefaultAppPool") nommant chaque pool d'applications qui vous intéresse, et créez des boutons et des raccourcis clavier pour eux.

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

Vous pouvez utiliser le gestionnaire de tâches pour afficher le nom d'utilisateur sous lequel le processus est en cours d'exécution (qui en général est le même que le nom du pool d'applications) et l'ID de processus, mais vous devez activer ces colonnes gestionnaire de tâches, et le nom du processus doit être le même que le pool d'applications (ce qui est la valeur par défaut pour autant que je sache). Notez également que toutes les méthodes répertoriées sur cette page peuvent n'afficher que les processus en cours d'exécution, ce qui signifie que si votre processus a été arrêté en raison d'un délai d'inactivité, vous devez d'abord utiliser le site afin d'accélérer le processus. la liste, et dans votre cas, cela signifie que vous devez d'abord accéder à tous les sites pour vous assurer que le processus qui leur est associé fonctionne.