Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Você pode depurar o código C++ que está sendo executado na unidade de processamento gráfico (GPU). O suporte à depuração de GPU no Visual Studio inclui detecção de condições de corrida, início de processos e anexar-se a eles e integração nas janelas de depuração.
Plataformas suportadas
A depuração é suportada no Windows 7, Windows 8, Windows 10, Windows 11, Windows Server 2008 R2, Windows Server 2012 e Windows Server 2016. Para depuração no emulador de software, Windows 8, Windows 10, Windows 11 ou Windows Server 2012, é necessário o Windows Server 2016. Para depuração no hardware, você deve instalar os drivers para sua placa gráfica. Nem todos os fornecedores de hardware implementam todos os recursos do depurador. Consulte a documentação do fornecedor para obter as limitações.
Observação
Fornecedores de hardware independentes que desejam oferecer suporte à depuração de GPU no Visual Studio devem criar uma DLL que implementa a interface VSD3DDebug e tem como alvo seus próprios drivers.
Configurando a depuração de GPU
O depurador não pode quebrar o código da CPU e o código da GPU na mesma execução do aplicativo. Por padrão, o depurador quebra no código da CPU. Para depurar o código da GPU, use uma destas duas etapas:
Na lista Tipo de depuração na barra de ferramentas Padrão , escolha Somente GPU.
No Gerenciador de Soluções, no menu de atalho do projeto, escolha Propriedades. Na caixa de diálogo Páginas de Propriedades , selecione Depuração e, em seguida, selecione Somente GPU na lista Tipo de Depurador .
Iniciando e anexando a aplicativos
Você pode usar os comandos de depuração do Visual Studio para iniciar e parar a depuração da GPU. Para obter mais informações, consulte Navegando pelo código com o depurador. Você também pode anexar o depurador de GPU a um processo em execução, mas somente se esse processo executar o código da GPU. Para obter mais informações, consulte Anexar a processos em execução.
Executar mosaico atual para o cursor e executar para o cursor
Ao depurar na GPU, você tem duas opções para executar no local do cursor. Os comandos para ambas as opções estão disponíveis no menu de atalho do editor de código.
O comando Executar para Cursor executa a sua aplicação até que atinja o local do cursor e, em seguida, interrompa. Isso não implica que a thread atual seja executada até ao cursor; em vez disso, significa que a primeira thread que alcançar o ponto do cursor causa uma interrupção. Consulte Navegando pelo código com o depurador
O comando Executar mosaico atual para cursor executa a aplicação até que todos os segmentos no mosaico atual atinjam o cursor e, em seguida, sejam interrompidos.
Depurando o Windows
Usando determinadas janelas de depuração, você pode examinar, sinalizar e congelar threads de GPU. Para obter mais informações, consulte:
Exceções de sincronização de dados
O depurador pode identificar várias condições de sincronização de dados durante a execução. Quando uma condição é detetada, o depurador entra no modo de interrupção. Você tem duas opções: Quebrar ou Continuar. Usando a caixa de diálogo Exceções, pode configurar se o depurador deteta estas condições e também para quais condições deverá parar. Para obter mais informações, consulte Gerenciando exceções com o depurador. Você também pode usar a caixa de diálogo Opções para especificar que o depurador deve ignorar exceções se os dados gravados não alterarem o valor dos dados. Para obter mais informações, consulte Geral, Depuração, Caixa de diálogo Opções.
Solução de problemas
Especificando um acelerador
Os pontos de interrupção no código da GPU só são atingidos se o código estiver a ser executado no acelerador::direct3d_ref (REF). Se você não especificar um acelerador em seu código, o acelerador REF será selecionado automaticamente como o Tipo de acelerador de depuração nas propriedades do projeto. Se o seu código selecionar explicitamente um acelerador, o acelerador REF não será usado durante a depuração e os pontos de interrupção não serão atingidos, a menos que o hardware da GPU tenha suporte para depuração. Pode corrigir isto ao escrever o seu código para que ele utilize o acelerador REF durante a depuração. Para obter mais informações, consulte Propriedades do projeto e Usando os objetos acelerador e accelerator_view e Configurações do projeto para uma configuração de depuração em C++.
Pontos de interrupção condicionais
Pontos de interrupção condicionais no código da GPU são suportados, mas nem todas as expressões podem ser avaliadas no dispositivo. Quando uma expressão não pode ser avaliada no dispositivo, ela é avaliada no depurador. É provável que o depurador seja executado mais lentamente do que o dispositivo.
Erro: Há um problema de configuração com o Tipo de Acelerador de Depuração selecionado.
Este erro ocorre quando existe uma inconsistência entre as definições do projeto e a configuração do PC onde estás a depurar. Para obter mais informações, consulte Definições do Projeto para uma Configuração de Depuração em C++.
Erro: O driver de depuração para o tipo de acelerador de depuração selecionado não está instalado na máquina de destino.
Este erro acontece se estiver a depurar num PC remoto. O depurador não pode determinar até o tempo de execução se os drivers estão instalados no PC remoto. Os drivers estão disponíveis a partir do fabricante da placa gráfica.
Erro: A deteção e recuperação de tempo limite (TDR) deve ser desabilitada no local remoto.
É possível que os cálculos AMP C++ excedam o intervalo de tempo padrão definido pelo TDR (processo de deteção e recuperação de tempo limite) do Windows. Quando isso acontece, o cálculo é cancelado e os dados são perdidos. Para obter mais informações, consulte Manipulando TDRs em C++ AMP.
Conteúdo relacionado
- Guia: Depuração de uma Aplicação AMP C++
- Definições do Projeto para Configuração de Debug C++
- Iniciar depuração de GPU no Visual Studio