Tutorial: Actualización de las herramientas de compilación de C++ (MSVC) de Microsoft para el proyecto de ejemplo hilo

En este tutorial se muestra cómo usar GitHub Copilot para modernizar el proyecto de ejemplo hilo mediante la actualización a las herramientas de compilación de MSVC más recientes. Usarás el agente de modernización para identificar y resolver problemas y, a continuación, usarás el agente Depurador para solucionar un problema de ejecución.

Acerca de Hilo

Hilo fue un proyecto de ejemplo desarrollado por Microsoft en 2012 para demostrar la creación de aplicaciones destinadas a Windows 8 con C++, XAML moderno y el Windows Runtime. La aplicación Hilo es una aplicación de exploración fotográfica que también incluye características de anotación y uso compartido. Hemos dejado de actualizar el ejemplo en 2015 y archivamos el código fuente de este ejemplo y otros ejemplos de C++ enviados previamente en el repositorio VCSamples GitHub.

Captura de pantalla de la ventana principal de la aplicación Hilo que muestra el contenido de la carpeta Imágenes del usuario.

Desafíos de modernización

Hay varios problemas que detecta y resuelve el agente después de actualizar Hilo para usar una versión más reciente de MSVC Build Tools. Estos son los problemas al compilar con las herramientas de compilación de C++ (MSVC) de Microsoft versión 14.51.

  • La std::tr1::is_base_of plantilla de clase se usa en varios lugares, pero ya no está disponible en la biblioteca estándar de C++ de MSVC, ya que is_base_of la plantilla de clase se ha promocionado para formar parte del estándar completo. Se trata de un error de bloqueo.
  • La ID2D1Factory::GetDesktopDpi función está en desuso.
  • La[uuid(_string_)]sintaxis de los atributos ATL aplicados a tipos ha quedado obsoleta.
  • Hay un proyecto que el Asistente para la instalación no puede actualizar. Si no tiene instaladas las herramientas de compilación de MSVC v120 (lo que es probable), se trata de un error de bloqueo.
  • Hay un truncamiento de puntero en el código de control de ventanas que provoca una excepción de acceso a memoria en tiempo de ejecución.

Hay algunas otras advertencias que pueden no estar estrictamente relacionadas con la actualización, pero que el agente puede corregir opcionalmente. Estas advertencias incluyen:

  • Restricción de advertencias en torno a cadenas de caracteres de varios bytes y cadenas de caracteres anchos.
  • Un error tipográfico en el nombre de un archivo de salida en un paso de compilación personalizado.

Configuración

Instalación de herramientas de desarrollo

Para completar este tutorial, debe seguir las instrucciones de instalación del agente de modernización de GitHub Copilot para C++.

Clonación del repositorio

Abra Visual Studio y, en la ventana Inicio, seleccione Clone a repository. Si la ventana de inicio no aparece, puede abrirla a través de Archivo>Ventana de inicio.

Captura de pantalla de la ventana inicio de Visual Studio con el vínculo Clonar un repositorio resaltado.

Para la ubicación del repositorio, escriba: https://github.com/microsoft/VCSamples.git. Elija una ruta de acceso adecuada en el sistema para clonar el repositorio y haga clic en el botón Clonar .

Captura de pantalla de la ventana

Iniciar la actualización

Carga de Hilo.sln en Visual Studio

Después de clonar el repositorio, cargue el archivo de solución en .<repo-root>/VC2013Samples/Hilo/C++/Hilo.sln Usamos la versión que se incluye con Visual Studio 2013 para este tutorial.

Usar el Asistente para la instalación para actualizar archivos de proyecto

Si no tiene instaladas las herramientas v120, Visual Studio debe iniciar la ventana del Asistente para la instalación para guiarle a través de la solución de problemas con los componentes que faltan. Cuando vea esta ventana, debe elegir Reasignar todo y hacer clic en Aplicar. Si no aparece la ventana, puede abrirla desde el menú archivo haciendo clic en Project>Retarget solution.

Captura de pantalla de la ventana del Asistente para la instalación en la que se muestran los proyectos de Hilo. Todos están seleccionados para la reasignación de destino y el botón Aplicar aparece resaltado.

Inicie el agente de modernización de Copilot

Una vez que el Asistente de configuración haya cambiado la plataforma de destino del proyecto, debería recibir un mensaje en la barra de información con un enlace para iniciar el agente de modernización. Al hacer clic en el vínculo Run GitHub Copilot modernization for C++ se inicia el proceso de actualización.

Captura de pantalla del mensaje de la barra de información en Visual Studio para iniciar el agente de modernización.

Si la barra de información no aparece, puede iniciar el agente haciendo clic con el botón derecho en la solución en la Explorador de soluciones y haciendo clic en Modernize. Si va a esa ruta, puede iniciar la actualización enviando el mensaje I just updated MSVC Build Tools. Resolve any upgrade issues. a Copilot Chat.

Trabajar con el agente

Interacción con el agente para obtener los mejores resultados

El agente de modernización .NET comparte el mismo modelo de interacción subyacente que el agente de C++. La documentación de Trabajar con el agente de modernización para .NET cubre en detalle los patrones generales. Tenga en cuenta que los ejemplos y escenarios de ese artículo son específicos de .NET y no se aplican directamente a C++.

Para las actualizaciones de C++, algunas sugerencias más pueden ayudar al agente a funcionar bien:

  • Sea específico sobre el ámbito. En lugar de pedir al agente que actualice todo de una vez, indíquele en qué proyectos, bibliotecas o diagnósticos debe centrarse. Por ejemplo: "Corrija las advertencias de desaprobación C4996 en el proyecto NetworkClient."
  • Describa los diagnósticos que espera que corrija el agente. Si conoce los códigos de error o advertencia específicos introducidos por la actualización del conjunto de herramientas, indique al agente por adelantado. Estas instrucciones adicionales ayudan al agente a priorizar y evita el tiempo invertido en problemas no relacionados.
  • Asegúrese de que las herramientas de edición de código de C/C++ están habilitadas. Compruebe que las herramientas necesarias están disponibles en la configuración antes de empezar. Para obtener más información, consulte Herramientas de edición de código de C/C++.
  • Codificación de convenciones de codificación mediante instrucciones personalizadas. Codifique instrucciones como convenciones de nomenclatura, API preferidas o patrones para evitar, en instrucciones personalizadas. El agente lee y sigue estas instrucciones a lo largo de la actualización. Algunos ejemplos útiles de C++ incluyen convenciones como "Preferir auto dónde es obvio el tipo" y "Seguir regla de cero (o Regla de Tres/Cinco donde la propiedad del recurso lo requiere)."

Comportamientos esperados

Note

Debido a la naturaleza de los agentes de inteligencia artificial basados en LLM, los pasos que toma el agente y la salida que genera pueden diferir de lo que se muestra aquí.

Evaluación previa

El agente determina primero el entorno en el que se ejecuta, como el sistema de control de código fuente, y para comprender su objetivo. En nuestro caso, detecta que está intentando actualizar el proyecto para usar la versión más reciente de MSVC e inicializa el escenario adecuado. Crea un scenario.md archivo y un scenario-instructions.md archivo para contener metadatos sobre el escenario.

Estos archivos contienen información como si el agente debe funcionar en modo automático o guiado , cuál es la estrategia para realizar confirmaciones y otra información que afecta a cómo debe proceder el agente. Si expresa alguna preferencia más adelante durante el funcionamiento del agente, el agente puede agregar esas preferencias al scenario-instructions.md archivo.

Captura de pantalla del contenido de un archivo scenario-instructions.md.

Assessment

Después de la inicialización, el agente realiza una evaluación del proyecto realizando una recompilación limpia del proyecto e inspeccionando la salida de la compilación en busca de errores y advertencias. Con esa información y con el contexto que el agente recopila del repositorio, genera un archivo assessment.md que describe los problemas que ha encontrado y si considera que están dentro o fuera del alcance de la tarea de actualización.

Captura de pantalla del contenido representado de un archivo assessment.md.

Si el agente funciona en modo guiado , el agente se detiene aquí y solicita su revisión de la evaluación. Realice los cambios deseados; para ello, solicite al agente o edite el archivo Markdown directamente y, a continuación, continúe con la fase de planeación . Si el agente funciona en modo automático , el agente continúa en la siguiente fase automáticamente. Si desea cambiar algo, debe detener el agente pulsando el botón Cancelar, hacer los cambios y reanudar el agente escribiendo el comando "Reanudar" en la ventana de chat de Copilot.

La evaluación identifica varios de los problemas mencionados anteriormente en el tutorial. Algunos problemas no aparecen hasta más adelante, ya que están ocultos por errores existentes. No te preocupes, se descubren más adelante. Si desea que el agente se detenga para obtener su aprobación ante cualquier problema detectado más tarde, puede especificar esas instrucciones en su archivo scenario-instructions.md.

Planificación

Una vez que el agente inicia la fase de planificación, realiza un análisis más profundo de las incidencias dentro del alcance y propone posibles soluciones en un archivo plan.md generado. También genera un tasks.md archivo que proporciona pasos y instrucciones más estructurados para ejecutar el plan.

Captura de pantalla del contenido representado de un archivo plan.md.

Al igual que con Assessment, lo que hace el agente depende de si funciona en modo guiado o automático . Si se ejecuta en modo guiado , el agente le ofrece la oportunidad de dirigirlo para corregir problemas de ciertas maneras o incluso pedir que aparezca con opciones alternativas con descripciones más detalladas de ventajas y desventajas. También puede especificar otras restricciones, como convenciones de codificación o pasos de validación especiales para algunos problemas.

Execution

Después de aprobar el plan (o una vez completado el planeamiento en modo automático ), el agente se mueve a la fase ejecución. Aquí, comienza a gestionar las tareas que tiene por delante, adaptándose a la nueva información que descubre durante la ejecución. Con una observación cuidadosa, verá que el agente detecta los problemas ocultos anteriormente y ajusta su plan en consecuencia.

Captura de pantalla del agente en medio de la fase ejecución, que reacciona a los problemas recién detectados.

El resultado final de la fase ejecución es una serie de confirmaciones en el repositorio que resuelven los problemas en el ámbito y un proyecto que ahora se puede compilar correctamente. Sin embargo, una compilación limpia es solo uno de los pasos para actualizar el proyecto. También debe ejecutarse correctamente.

Usa el agente Debugger para resolver problemas de ejecución

Iniciar el explorador

En el Explorador de soluciones, haga clic con el botón derecho en el proyecto Browser y haga clic en Set como proyecto de inicio. A continuación, inicie una sesión del depurador del explorador Hilo presionando F5 o seleccionando Depurar> en el menú archivo.

La sesión de depuración debería detenerse casi de inmediato con una excepción de acceso a memoria no controlada.

Captura de pantalla de la excepción de acceso de lectura de memoria al iniciar por primera vez el explorador Hilo.

Examinar la excepción de acceso de lectura a la memoria

Vamos a usar el agente del depurador para analizar esta excepción e implementar una corrección. Haga clic en el botón Analyze con Copilot en la ventana de información de excepciones para iniciar el agente del depurador.

 Captura de pantalla de la ventana de excepción del explorador Hilo con el botón Analizar con Copilot resaltado.

El agente del depurador usa información de estado de programa y depuración para determinar la causa principal de errores en tiempo de ejecución y, a continuación, analiza el código fuente para implementar una solución. En este caso, el agente identifica que el acceso a memoria no válido se debe a una operación de conversión incorrecta que truncaba un puntero de 64 bits a solo 32 bits. Ese puntero ahora no es válido y apunta a una ubicación de memoria no válida, lo que provoca la excepción. Propone un método diferente para obtener el tipo correcto y evita el truncamiento.

Aplicar cambios

Acepte los cambios que sugiere, detenga la sesión de depuración presionando Mayús + F5*y, a continuación, presione F5 para iniciar una nueva sesión. El proyecto se vuelve a compilar con el cambio y Visual Studio inicia la aplicación actualizada. Ahora debería ver que aparece la ventana Del explorador Hilo.

Captura de pantalla de la ventana principal de la aplicación Hilo que muestra el contenido de la carpeta Imágenes del usuario.

Si dedica tiempo a explorar la aplicación, puede detectar más problemas en tiempo de ejecución. Dejamos cualquier otra cuestión como ejercicio para el lector. Recuerde usar las nuevas herramientas agenticas para llegar a su objetivo final más rápido.

Resumen

En este tutorial se muestra cómo GitHub Copilot agentes pueden acelerar significativamente la modernización de proyectos de C++ más antiguos. El agente de modernización y el agente de depuración pueden trabajar juntos para agilizar el proceso de actualización desde la evaluación inicial hasta la validación en tiempo de ejecución.

Ventajas principales

  • Detección automatizada de problemas: los agentes identifican sistemáticamente cambios importantes, desusos y problemas de compatibilidad que surgen de las actualizaciones.
  • Soluciones inteligentes: en lugar de requerir correcciones manuales, los agentes analizan el contexto de código y proponen soluciones adecuadas adaptadas a su código base.
  • Eficiencia: lo que manualmente podría llevar días o semanas se completa en cuestión de horas, mientras el agente se encarga tanto de los errores de compilación como de los problemas en tiempo de ejecución.
  • Modos guiados o automáticos: elija entre instrucciones prácticas o ejecución totalmente automatizada en función del nivel de confort y los requisitos del proyecto.
  • Aprendizaje y adaptación: los agentes detectan problemas ocultos a medida que progresan y ajustan su enfoque en consecuencia, lo que garantiza una cobertura completa.