Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este passo a passo mostra como usar GitHub Copilot para modernizar o projeto de exemplo do Hilo atualizando-o para as ferramentas de build mais recentes do MSVC. Você usará o agente de modernização para identificar e resolver problemas e, em seguida, usar o agente de depurador para corrigir um problema de runtime.
Sobre Hilo
Hilo foi um projeto de exemplo desenvolvido pela Microsoft em 2012 para demonstrar a criação de aplicativos direcionados Windows 8 usando C++, XAML e Windows Runtime "modernos". O aplicativo Hilo é um aplicativo de navegação por fotos que também inclui recursos de anotação e compartilhamento. Paramos de atualizar o exemplo em 2015 e arquivamos o código-fonte para este exemplo e outras amostras de C++ enviadas anteriormente no VCSamples GitHub repositório.
Desafios de modernização
Há vários problemas que o agente descobre e resolve depois de atualizar o Hilo para usar uma versão mais recente do MSVC Build Tools. Aqui estão os problemas na compilação com as Ferramentas de Compilação do Microsoft C++ (MSVC), versão 14.51.
- O
std::tr1::is_base_ofmodelo de classe é usado em vários locais, mas não está mais disponível na biblioteca padrão C++ do MSVC, poisis_base_ofo modelo de classe foi promovido a fazer parte do padrão completo. Esse é um erro de bloqueio. - A
ID2D1Factory::GetDesktopDpifunção foi preterida. - A
[uuid(_string_)]sintaxe para atributos ATL em tipos foi preterida. - Há um projeto que o Assistente de Instalação não consegue atualizar. Se você não tiver as Ferramentas de Build do MSVC v120 instaladas (o que é provável), esse será um erro de bloqueio.
- Há um truncamento de ponteiro no código de manipulação de janelas que causa uma exceção de acesso à memória em tempo de execução.
Há alguns outros avisos que podem não estar estritamente relacionados à atualização, mas que o agente pode, opcionalmente, corrigir. Estes avisos incluem:
- Restringir avisos em torno de cadeias de caracteres de vários bytes e cadeias de caracteres largas.
- Um erro de digitação no nome de um arquivo de saída em uma etapa de build personalizada.
Configuração
Instalar ferramentas de desenvolvimento
Para concluir este passo a passo, você precisa seguir as instruções de instalação para o agente de modernização do GitHub Copilot para C++.
Clonar o repositório
Abra o Visual Studio e, na Janela Inicial, selecione Clonar um repositório. Se a Janela Inicial não aparecer, você pode abri-la em Arquivo>Janela Inicial.
Para o local do repositório, insira: https://github.com/microsoft/VCSamples.git. Escolha um caminho apropriado em seu sistema para clonar o repositório e clique no botão Clonar
Iniciar a atualização
Carregar Hilo.sln em Visual Studio
Depois de clonar o repositório, carregue o arquivo de solução no <repo-root>/VC2013Samples/Hilo/C++/Hilo.sln. Estamos usando a versão fornecida com Visual Studio 2013 para este passo a passo.
Usar o Assistente de Instalação para atualizar arquivos de projeto
Se você não tiver as ferramentas v120 instaladas, Visual Studio deverá iniciar a janela do Assistente de Instalação para orientá-lo a lidar com os componentes ausentes. Quando vir essa janela, você deverá optar por redirecionar tudo e clicar em Aplicar. Se a janela não aparecer, você pode abri-la no menu Arquivo clicando em Project>Redefinir destino da solução.
Iniciar o agente de modernização do Copilot
Depois que o Assistente de Instalação redirecionar o projeto, você deverá receber uma mensagem de barra de informações com um link para iniciar o agente de modernização. Clicar no link Run GitHub Copilot modernization for C++ inicia o processo de atualização.
Se a barra de informações não aparecer, você poderá iniciar o agente clicando com o botão direito do mouse na solução no Gerenciador de Soluções e clicando em Modernize. Se você seguir essa rota, poderá iniciar a atualização enviando o prompt I just updated MSVC Build Tools. Resolve any upgrade issues. para Copilot Chat.
Trabalhando com o agente
Como interagir com o agente para obter os melhores resultados
O agente de modernização .NET compartilha o mesmo modelo de interação subjacente que o agente C++. A documentação Trabalhar com o agente de modernização para .NET aborda detalhadamente os padrões gerais. Tenha em mente que os exemplos e cenários nesse artigo são específicos .NET e não se aplicam diretamente ao C++.
Para atualizações do C++, mais algumas dicas podem ajudar o agente a ter um bom desempenho:
- Seja específico quanto ao escopo. Em vez de pedir ao agente para atualizar tudo de uma vez, informe em quais projetos, bibliotecas ou diagnósticos se concentrar. Por exemplo: "Corrija os avisos de descontinuação do C4996 no projeto
NetworkClient." - Descreva o diagnóstico que você espera que o agente corrija. Se você souber os códigos de aviso ou erro específicos introduzidos pela atualização do conjunto de ferramentas, informe o agente antecipadamente. Essas instruções adicionais ajudam o agente a priorizar e evita o tempo gasto em problemas não relacionados.
- Verifique se as ferramentas de edição de código C/C++ estão habilitadas. Verifique se as ferramentas necessárias estão disponíveis na configuração antes de começar. Para obter detalhes, consulte as ferramentas de edição de código C/C++.
- Codificar convenções de codificação usando instruções personalizadas. Codificar diretrizes, como convenções de nomenclatura, APIs preferenciais ou padrões a serem evitados, em instruções personalizadas. O agente lê e segue estas instruções durante a atualização. Exemplos úteis do C++ incluem convenções como "Preferir
autoonde o tipo é óbvio" e "Seguir Regra de Zero (ou Regra de Três/Cinco em que a propriedade do recurso exige isso)."
Comportamentos esperados
Note
Devido à natureza dos agentes de IA baseados em LLM, as etapas que o agente executa e a saída que ele produz podem ser diferentes das mostradas aqui.
Pré-avaliação
O agente primeiro determina o ambiente em que está em execução, como seu sistema de controle do código-fonte, e para entender sua meta. Em nosso caso, ele detecta que você está tentando atualizar seu projeto para usar o MSVC mais recente e inicializa o cenário apropriado. Ele cria um scenario.md arquivo e um scenario-instructions.md arquivo para conter metadados sobre o cenário.
Esses arquivos contêm informações como se o agente deve operar no modo Automático ou Guiado , qual é a estratégia para fazer confirmações e outras informações que afetam como o agente deve continuar. Se você expressar as preferências posteriormente durante a operação do agente, o agente poderá adicionar essas preferências ao scenario-instructions.md arquivo.
Assessment
Após a inicialização, o agente faz uma avaliação do projeto fazendo uma recompilação limpa do projeto e inspecionando a saída de build em busca de erros e avisos. Usando essas informações e o contexto que o agente coleta do repositório, ele produz um assessment.md arquivo que descreve os problemas encontrados e se ele os considera ou não no escopo ou fora do escopo da tarefa de atualização.
Se o agente estiver no modo Guiado, ele para aqui e solicita que você revise a avaliação. Faça as alterações desejadas solicitando ao agente ou editando o arquivo Markdown diretamente e, em seguida, continue no estágio de Planejamento . Se o agente estiver operando no modo Automático , o agente continuará no próximo estágio automaticamente. Se você quiser alterar algo, precisará parar o agente pressionando o botão cancelar, fazer as alterações e retomar o agente digitando o prompt "Resume" na janela de chat Copilot.
A avaliação identifica vários dos problemas mencionados anteriormente no passo a passo. Alguns problemas não aparecem até mais tarde, pois estão ocultos por erros existentes. Não se preocupe, eles são descobertos mais tarde. Se você quiser que o agente pause para obter sua aprovação para quaisquer problemas descobertos tardiamente, você pode especificar essas instruções em seu scenario-instructions.md arquivo.
Planejamento
Depois que o agente inicia a etapa de planejamento, ele faz uma análise mais aprofundada das questões no escopo e propõe possíveis soluções em um arquivo plan.md gerado. Ele também gera um tasks.md arquivo que fornece etapas e instruções mais estruturadas para executar o plano.
Assim como na Avaliação, o que o agente faz depende se ele estiver operando no modo Guiado ou Automático . Se estiver no modo Guiado, o agente dará a você a oportunidade de orientá-lo para corrigir problemas de maneiras específicas ou até mesmo pedir que ele proponha opções alternativas com descrições mais detalhadas das vantagens e desvantagens. Você também pode especificar outras restrições, como convenções de codificação ou etapas especiais de validação para alguns problemas.
Execution
Depois de aprovar o plano (ou quando o Planejamento for concluído no modo Automático ), o agente passará para o estágio de Execução. Aqui, ele começa a lidar com as tarefas que tem à sua frente, adaptando-se a novas informações descobertas durante a execução. Com uma observação cuidadosa, você verá que o agente descobre os problemas ocultos anteriormente e ajusta seu plano adequadamente.
O resultado final da fase de execução é uma série de commits no seu repositório que resolvem os problemas dentro do escopo e um projeto que agora pode ser compilado com sucesso. No entanto, uma compilação limpa é apenas uma das etapas para atualizar seu projeto. Ele também precisa ser executado corretamente.
Use o agente Depurador para resolver problemas em tempo de execução
Iniciar o navegador
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto Browser e clique em Set como projeto de inicialização. Em seguida, inicie uma sessão de depurador do Navegador Hilo pressionando F5 ou selecionando Depurar>Iniciar Depuração no menu de arquivo.
A sessão de depuração deve ser interrompida quase imediatamente devido a uma exceção de acesso à memória sem tratamento.
Analisar a exceção de acesso de leitura à memória
Vamos usar o agente de depurador para analisar essa exceção e implementar uma correção. Clique no botão Analyze com Copilot na janela de informações de exceção para iniciar o agente do Depurador.
O agente de depurador usa informações de estado de depuração e de programa para determinar a causa raiz de erros de runtime e, em seguida, analisa o código-fonte para implementar uma solução. Nesse caso, o agente identifica que o acesso inválido à memória se deve a uma operação de conversão inadequada que truncou um ponteiro de 64 bits para apenas 32 bits. Esse ponteiro agora é inválido e aponta para um local de memória inválido, o que causa a exceção. Ele propõe um método diferente para obter o tipo correto e evita o truncamento.
Aplicar alterações
Aceite as alterações sugeridas, interrompa a sessão de depuração pressionando Shift + F5*e inicie uma nova sessão pressionando F5. O projeto é recompilado com a alteração e Visual Studio inicia o aplicativo atualizado. Agora você deve ver a janela do Navegador Hilo aparecer.
Se você gastar tempo explorando o aplicativo, poderá descobrir mais problemas de runtime. Deixamos quaisquer outras questões como exercícios para o leitor. Lembre-se de usar suas novas ferramentas autônomas para alcançar seu objetivo final mais rapidamente.
Resumo
Este passo a passo demonstrou como GitHub Copilot agentes podem acelerar significativamente a modernização de projetos C++ mais antigos. O agente de modernização e o agente de depuração podem trabalhar juntos para agilizar o processo de atualização, desde a avaliação inicial até a validação em tempo de execução.
Principais benefícios
- Detecção automatizada de problemas: os agentes identificam sistematicamente alterações incompatíveis, descontinuações e problemas de compatibilidade decorrentes de atualizações.
- Soluções inteligentes: em vez de exigir correções manuais, os agentes analisam o contexto de código e propõem soluções apropriadas adaptadas à base de código.
- Eficiência: o que pode levar dias ou semanas de trabalho manual é concluído em horas, com o agente tratando erros de build e problemas de runtime.
- Modos guiados ou automáticos: escolha entre diretrizes práticas ou execução totalmente automatizada com base em seu nível de conforto e requisitos de projeto.
- Aprendizado e adaptação: os agentes descobrem problemas ocultos à medida que avançam e ajustam sua abordagem adequadamente, garantindo uma cobertura abrangente.