Compartir a través de


Tutorial: Depurar una solución que incluye código administrado y código nativo

Actualización: noviembre 2007

Este tutorial muestra los pasos para depurar una solución que incluye componentes administrados, de .NET Compact Framework y nativos. Visual Studio no admite la depuración de interoperabilidad de aplicaciones de dispositivos como tal. Es decir, no es posible asociar depuradores administrados y nativos al mismo tiempo.

La técnica recomendada para depurar una solución que incorpore tanto elementos nativos como elementos administrados consiste en asociar el depurador necesario para una sección concreta (por ejemplo, una sección administrada) y, a continuación, desasociar ese depurador y asociar el otro cuando sea necesario. Puede repetir estos pasos de asociación y desasociación tantas veces como sea necesario para recorrer el programa.

Nota:

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio incluidos en las instrucciones siguientes. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Este tutorial se ha escrito usando Configuración de desarrollo de Visual C#. Contiene las siguientes secciones:

  • Habilitar la asociación del depurador administrado

  • Iniciar la aplicación

  • Establecer un punto de interrupción en el código nativo

  • Asociar con el depurador nativo

  • Ejecutar el punto de interrupción nativo

  • Asociar con el depurador administrado

  • Establecer un punto de interrupción en el código administrado

  • Ejecutar hasta el punto de interrupción administrado

  • Conclusión

Requisitos previos

Este tutorial se basa en una solución generada con otro tutorial, Tutorial: Hello World: Ejemplo de interoperabilidad COM para Smart Devices. Asegúrese de que dicho tutorial se haya generado y ejecutado correctamente.

Habilitar la asociación del depurador administrado

De forma predeterminada, los dispositivos (incluidos los emuladores) no permiten al depurador administrado asociarse a procesos que ya se están ejecutando. La asociación del depurador administrado a un proceso que ya está en ejecución es una situación que suele darse en las soluciones de dispositivos que incluyen tanto código administrado como código nativo.

Por tanto, el primer paso es configurar el dispositivo para permitir que el depurador administrado se asocie a un proceso que ya se está ejecutando. Esto se hace estableciendo una clave del Registro en el dispositivo.

Nota:

El establecimiento de la clave afecta sólo a la asociación de procesosadministrados que ya estén en ejecución. No afecta al inicio de un proyecto con el método Iniciar con depuración (F5). No obstante, si se desasocia después de Iniciar con depuración, necesitará este proceso para volver a asociar e iniciar de nuevo la depuración.

Para permitir que el depurador administrado se asocie a un proceso en ejecución

  1. En el menú Inicio de Windows, seleccione Todos los programas, Microsoft Visual Studio 2008, Herramientas remotas de Visual Studio y, a continuación, haga clic en Remote Registry Editor.

  2. En la ventana Seleccionar un dispositivo Windows CE, expanda SDK de Windows Mobile 5.0 Pocket PCy, a continuación, haga clic en Windows Mobile 5.0 Pocket PC Emulator. Éste es el dispositivo de destino para este tutorial.

  3. Haga clic en Aceptar.

    Se abrirá la ventana de progreso Estableciendo conexión con el dispositivo y, a continuación, se abrirá el emulador del dispositivo y el editor de registro remoto de Windows CE.

  4. En el Editor del Registro, expanda Windows Mobile 5.0 Pocket PC Emulator y, a continuación, cree la clave siguiente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETCompactFramework\Managed Debugger.

    Cree la clave haciendo clic con el botón secundario en .NETCompactFramework, seleccionando Nuevo y haciendo clic en Clave.

    Observe que hay un espacio entre "Depurador" y "administrado".

  5. Cree un valor DWORD denominado AttachEnabled.

    Cree el valor DWORD haciendo clic con el botón secundario en Depurador administrado, seleccionando Nuevo y haciendo clic en Valor DWORD.

  6. Establezca el Nombre en AttachEnabled y el Valor en 1.

    Nota:

    El establecimiento de esta clave de depuración de dispositivos reduce considerablemente el rendimiento. Cuando no esté depurando, deshabilite esta funcionalidad restableciendo el valor de datos en 0.

  7. Deje abierto el emulador del dispositivo para conservar la configuración del Registro en los pasos siguientes. Puede cerrar el Editor del Registro.

Iniciar la aplicación

El paso siguiente consiste en iniciar la aplicación de InteropSolution.

Para iniciar la aplicación.

  1. Abra la solución que creó en Tutorial: Hello World: Ejemplo de interoperabilidad COM para Smart Devices.

    Asegúrese de que aparezca Windows Mobile 5.0 Pocket PC Emulator en el cuadro Dispositivo de destino de la barra de herramientas.

  2. En el menú Depurar de Visual Studio, haga clic en Iniciar depuración o presione F5.

    Este paso implementa inmediatamente en el emulador el proyecto nativo HelloCOMObject, sin necesidad de otra intervención del usuario.

  3. Cuando se abra el cuadro de diálogo Implementar SayHello, seleccione Windows Mobile 5.0 Pocket PC Emulator y haga clic en Implementar.

    Este paso implementa el proyecto administrado.

    La aplicación se abre en el emulador. No haga clic todavía en el botón.

Establecer un punto de interrupción en el código nativo

El paso siguiente es establecer un punto de interrupción en el código nativo para preparar la asociación del depurador nativo.

Establecer un punto de interrupción en el código nativo

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Hello.cpp y, a continuación, en Ver código.

  2. Inserte un punto de interrupción en la línea que comienza por *text haciendo clic en el margen izquierdo del Editor de código.

    El símbolo de punto de interrupción aparecerá como un círculo vacío con un signo de exclamación, para indicar que el punto de interrupción no se puede resolver en estos momentos. Esto se debe a que le faltan los símbolos y orígenes adecuados en este momento.

  3. En el menú Depurar de Visual Studio, seleccione Windows y, a continuación, haga clic en Módulos.

    La ventana Módulos muestra todos los módulos cargados hasta el momento, por ejemplo, SayHello.exe de la aplicación administrada. Tenga en cuenta que todavía no se ha cargado el HelloCOMObject.dll nativo, porque aún no ha hecho clic en el botón en la aplicación.

Asociar con el depurador nativo

El paso siguiente es desasociar el depurador administrado para poder asociar el depurador nativo. Recuerde que en los proyectos de dispositivo no es posible asociar ambos depuradores al mismo tiempo. Éstos son los pasos que debe seguir cada vez que necesite cambiar del depurador administrado al depurador nativo.

Para asociar el depurador nativo

  1. En el menú Depurar de Visual Studio, haga clic en Desasociar todo.

    Este paso desasocia el depurador administrado, pero permite seguir ejecutando la aplicación.

  2. En el menú Depurar, haga clic en Asociar al proceso.

  3. En el cuadro Transporte, seleccione Smart Device.

  4. Para rellenar el cuadro Calificador, haga clic en Examinar.

  5. En el cuadro de diálogo Conectar con dispositivo, seleccione Windows Mobile 5.0 Pocket PC Emulator y, a continuación, haga clic en Conectar.

  6. Para rellenar el cuadro Asociar a, haga clic en Seleccionar.

  7. En el cuadro de diálogo Seleccionar tipo de código, seleccione Depurar estos tipos de código, desactive la casilla Administrado, active la casilla Nativo y, a continuación, haga clic en Aceptar.

  8. En el cuadro Procesos disponibles, seleccione SayHello.exe y, a continuación, haga clic en Asociar.

    Ahora está asociado al depurador nativo.

Ejecutar el punto de interrupción nativo

Ya está listo para avanzar hasta el punto de interrupción que estableció en el código nativo. Cuando examine la ventana Módulos, podrá comprobar que ahora los módulos nativos están presentes. No obstante, el archivo Hellocomobject.dll todavía no está cargado porque aún no ha hecho clic en button1.

Nota:

Si ha ejecutado este tutorial anteriormente, puede que ya se hayan cargado los símbolos de depuración y puede omitir esos pasos. Si no, en la sección siguiente se describen los pasos para cargarlos.

Avanzar la ejecución hasta el punto de interrupción nativo

  1. En el formulario del emulador de dispositivo, haga clic en button1.

    El mensaje Hola a todos aparecerá en el formulario y hellocomobject.dll aparecerá en la ventana Módulos.

    Si en la columna Estado del símbolo de hellocomobject.dll no aparece Símbolos cargados, siga estos pasos:

    1. Haga clic con el botón secundario en hellocomobject.dll y, a continuación, en Cargar símbolos.

    2. En el cuadro de diálogo Buscar símbolos, navegue a InteropSolution\HelloCOMObject\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\HelloCOMObject.pdb.

    3. Haga clic en Abrir.

      La columna Estado del símbolo cambiará a Símbolos cargados, y el indicador de punto de interrupción lo mostrará como resuelto.

  2. En el formulario del emulador de dispositivo, haga clic en Aceptar en la ventana Hola a todos y, a continuación, vuelva a hacer clic en button1.

    El indicador del punto de interrupción mostrará que la ejecución se ha detenido en el punto de interrupción.

  3. En el menú Depurar, haga clic en Paso a paso por instrucciones o presione F11.

    Observe que la ejecución se desplaza a la línea siguiente. Esto indica que ahora puede recorrer la sección nativa de la solución.

Asociar con el depurador administrado

El paso siguiente es desasociar el depurador nativo para poder asociar al depurador administrado. Recuerde que en los proyectos de dispositivo no es posible asociar ambos depuradores al mismo tiempo. Éstos son los pasos que debe seguir cada vez que necesite cambiar del depurador nativo al depurador administrado.

Para asociar el depurador administrado

  1. En el menú Depurar de Visual Studio, haga clic en Desasociar todo.

    Este paso desasocia el depurador nativo, pero la aplicación continúa ejecutándose.

  2. En el menú Depurar, haga clic en Asociar al proceso y asegúrese de que el cuadro Transporte contiene Smart Device.

  3. Rellene el cuadro Calificador, haciendo clic en Seleccionar, seleccionando a continuación Windows Mobile 5.0 Pocket PC Emulator y haciendo clic en Conectar.

  4. Para rellenar el cuadro Asociar a, haga clic en Seleccionar y seleccione Depurar estos tipos de código; a continuación, active la casilla Administrado, desactive la casilla Nativo y haga clic en Aceptar.

    Si aparece un mensaje recordándole que la depuración nativa y la administrada no son compatibles, haga clic en Aceptar.

  5. En el cuadro Procesos disponibles, seleccione SayHello.exe y, a continuación, haga clic en Asociar.

    Ya está asociado el depurador administrado.

Establecer un punto de interrupción en el código administrado

El paso siguiente es establecer un punto de interrupción en el código administrado para preparar la asociación del depurador administrado.

Establecer un punto de interrupción en el código administrado

  1. En el Explorador de soluciones, haga clic con el botón secundario del mouse en Form1.cs y, a continuación, en Ver código.

  2. Cree un punto de interrupción en la línea string text;.

Ejecutar hasta el punto de interrupción administrado

Ya está listo para avanzar hasta el punto de interrupción que estableció en el código administrado.

Avanzar la ejecución hasta el punto de interrupción administrado

  • En el emulador de dispositivo, haga clic en button1.

    La ejecución se detiene en el punto de interrupción.

Conclusión

Para mejorar el rendimiento, no olvide restablecer la clave del Registro del dispositivo en 0 cuando ya no necesite asociar el depurador administrado a un proceso en ejecución.

Vea también

Tareas

Cómo: Conectar a procesos de dispositivos administrados

Cómo: Cambiar la configuración del Registro en un dispositivo

Otros recursos

Depurar proyectos de dispositivos

Depurar en Visual Studio