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.
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.
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_ofplantilla de clase se usa en varios lugares, pero ya no está disponible en la biblioteca estándar de C++ de MSVC, ya queis_base_ofla plantilla de clase se ha promocionado para formar parte del estándar completo. Se trata de un error de bloqueo. - La
ID2D1Factory::GetDesktopDpifunció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.
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 .
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.
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.
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
autodó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.
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.
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.
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.
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.
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.
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.
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.