Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Al depurar una extensión de Visual Studio, se usa una instancia especial de Visual Studio denominada Instancia experimental para hospedar la extensión mientras ejecuta el depurador en el IDE principal de Visual Studio. Las dos instancias se ejecutan de forma independiente en paralelo. En este artículo se describe cómo depurar extensiones creadas con el SDK de extensibilidad de VisualStudio.Extensibility cuando se ejecutan en la instancia experimental del IDE de Visual Studio.
Procesos de extensión
El proceso de depuración difiere ligeramente en función de si la extensión se ejecuta en proceso o fuera de proceso. Consulte Cree su primera extensión compatible con VSSDK para VisualStudio.Extensibility. Con una extensión fuera de proceso, la extensión se ejecuta en un proceso dedicado para las extensiones de Visual Studio. Este proceso, denominado Microsoft.ServiceHub.Host.Extensibility, gestiona toda la comunicación entre el proceso del IDE de Visual Studio y el proceso que hospeda la extensión. Al iniciar una extensión mediante F5, Visual Studio inicia la instancia experimental de Visual Studio y se conecta al proceso que hospeda la extensión. Normalmente no es necesario preocuparse por el proceso exacto, ya que al iniciar el depurador desde un proyecto de extensión presionando F5 en el IDE de Visual Studio, Visual Studio busca el proceso correcto para conectar el depurador.
Al iniciar una sesión de depuración, el ensamblado de extensión y sus símbolos no se cargan inmediatamente. Antes de que se cargue la extensión, Visual Studio realiza un seguimiento de los lugares en los que se podría activar la extensión. Esta información se administra en una instancia interna de VisualStudioContribution. Incluso antes de que se cargue la extensión, Visual Studio tiene información sobre dónde se puede activar, como cuando el usuario elige un elemento de menú determinado, presiona un botón de barra de herramientas o carga un archivo de un tipo determinado en el editor. El ensamblado de tu extensión no se cargará hasta que esté activada en el IDE. Por lo tanto, al depurar, lo primero que debe hacer es realizar una acción en el IDE de Visual Studio para activar la extensión que se va a cargar. Por ejemplo, es posible que tenga que seleccionar el elemento de menú o el botón de la barra de herramientas de la extensión. En ese momento, tu ensamblado de extensión se carga, se ejecuta el código de inicialización y puedes establecer puntos de interrupción y avanzar paso a paso por el código. El primer código que se va a ejecutar en la extensión es el InitializeAsync método de la Extension clase y el método siguiente es InitializeServices.
Procesos y pilas de llamadas
Si la extensión está en proceso, la pila de llamadas incluye marcos de pila de Visual Studio, así como marcos de pila de la extensión. Normalmente, los símbolos no están disponibles en Visual Studio, pero puede ver las llamadas donde Visual Studio llama a su extensión.
Con una extensión independiente del proceso, solo verá la pila de llamadas de su extensión; los marcos de pila de Visual Studio están en un proceso separado. Visual Studio llama a tu extensión a través de interfaces compatibles con JsonRpc, el host de ServiceHub enruta la llamada y, a continuación, la ejecución en tu proceso comienza en el callback. El control regresa a Visual Studio cuando tu callback finaliza.
El estado se pasa a su extensión mediante varios métodos según sea necesario y está envuelto por una instancia de IClientContext para facilitar su uso. Sin embargo, es importante tener en cuenta que es una instantánea del estado, la cual podría cambiar entre el momento de la instantánea y el momento en que está leyendo desde el código de extensión o visualizándolo en el depurador.
Hay algún código interno en el proceso de host de ServiceHub que maneja la intermediación de RPC (Remote Procedure Call). Si se produce un error en esta capa, no es visible para usted. Estos errores se deben notificar como problemas del producto.
Depurar la extensión en la instancia experimental de Visual Studio
Abra el proyecto de extensión.
Configure un punto de ruptura, por ejemplo, en el método
InitializeServicesde la extensión en la clase principal derivada deExtension. Para establecer un punto de interrupción en una línea de código, haga clic en la línea y presioneF9.En el menú principal, elija Depurar Iniciar depuración > o presione
F5. Se inicia la instancia experimental de Visual Studio; al mismo tiempo, se inicia el proceso de host de ServiceHub.Ejecute los pasos de la instancia experimental de Visual Studio que hacen que la extensión se active o reproduzca el escenario que pretende depurar.
Visual Studio se detiene en un punto de interrupción.
Sugerencia
Puede ser conveniente tener varios monitores, de modo que pueda ver el depurador y la instancia experimental al mismo tiempo en dos monitores diferentes. Es posible que quiera cambiar el tema en la instancia experimental para que sea más obvio con qué IDE está trabajando en un momento dado. Consulte Cambio de fuentes, colores y temas en Visual Studio.
Depurar la extensión mediante el Explorador de diagnósticos
Consulte VisualStudio.Extensibility Diagnostics Explorer para obtener más información.
Solución de problemas
Al iniciar el depurador, si ve el error Esta extensión no se admite en el producto actual, abra el .vsixmanifest archivo y compruebe el InstallationTarget elemento . No se admite el destino Microsoft.VisualStudio.IntegratedShell de instalación; use Microsoft.VisualStudio.Community en su lugar. Consulte Referencia del esquema de extensión VSIX 2.0.