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.
Você pode depurar o código C++ que está em execução na GPU (unidade de processamento de gráficos). O suporte à depuração de GPU no Visual Studio inclui detecção de corrida, inicialização de processos e anexação a eles e integração às janelas de depuração.
Plataformas compatíveis
Há suporte para depuração 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, o Windows Server 2016 é necessário. 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 limitações.
Observação
Os fornecedores de hardware independentes que desejam dar suporte à depuração de GPU no Visual Studio devem criar uma DLL que implemente a interface VSD3DDebug e direcione seus próprios drivers.
Configurando a depuração de GPU
O depurador não pode interromper o código da CPU e o código gpu na mesma execução do aplicativo. O depurador, por padrão, pausa no código da CPU. Para depurar o código gpu, use uma destas duas etapas:
Na lista Tipo de Depuração na barra de ferramentas Standard, 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 Apenas GPU na lista Tipo de Depurador.
Inicialização e anexação a aplicativos
Você pode usar os comandos de depuração do Visual Studio para iniciar e parar a depuração de GPU. Para obter mais informações, consulte Navegar 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 de GPU. Para obter mais informações, consulte Anexar a processos em execução.
Executar o bloco atual para o cursor e executar para o cursor
Ao depurar na GPU, você tem duas opções para continuar até a posição 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 seu aplicativo até chegar ao local do cursor e, em seguida, é interrompido. Isso não implica que o thread atual seja executado no cursor; em vez disso, significa que o primeiro thread que atinge o ponto de cursor dispara a quebra. Consulte Navegar pelo Código com o Depurador
O comando Executar Bloco Atual para Cursor executa seu aplicativo até que todos os threads no bloco atual atinjam o cursor e, em seguida, sejam interrompidos.
Depurando o Windows
Ao utilizar certas janelas de depuração, você pode examinar, marcar 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 é detectada, o depurador entra no estado de interrupção. Você tem duas opções: Interromper ou Continuar. Usando a caixa de diálogo Exceções , você pode configurar se o depurador detecta essas condições e também para quais condições ele será interrompido. Para obter mais informações, consulte Como gerenciar 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 Caixa de diálogo Geral, Depuração e Opções.
Resolução de problemas
Especificando um acelerador
Os pontos de interrupção no código GPU serão atingidos apenas se o código estiver em execução no acelerador::direct3d_ref (REF). Se você não especificar um acelerador em seu código, o acelerador REF será automaticamente selecionado como o Tipo de Acelerador de Depuração nas propriedades do projeto. Se o 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. Você pode corrigir isso escrevendo seu código para que ele utilize o acelerador REF durante a depuração. Para obter mais informações, consulte as propriedades do projeto e Objetos accelerator e accelerator_view e Configurações do Projeto para uma Configuração de Depuração em C++.
Pontos de interrupção condicionais
Há suporte para pontos de interrupção condicionais no código de GPU, 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. O depurador tende a ser executado mais lentamente do que o dispositivo.
Erro: há um problema de configuração com o tipo de acelerador de depuração selecionado.
Esse erro ocorre quando há uma inconsistência entre as configurações do projeto e a configuração do computador no qual você está depurando. Para obter mais informações, consulte Configurações do Projeto para uma Configuração de Depuração do C++.
Erro: o driver de depuração para o tipo de acelerador de depuração selecionado não está instalado no computador de destino.
Esse erro ocorrerá se você estiver depurando em um computador remoto. O depurador não pode determinar até o tempo de execução se os drivers estão instalados no computador remoto. Os drivers estão disponíveis no fabricante da placa gráfica.
Erro: A TDR (Detecção e Recuperação de Tempo Limite) deve ser desabilitada no site remoto.
É possível que as computações do C++ AMP excedam o intervalo de tempo padrão definido pelo TDR (processo de recuperação e detecção de tempo limite) do Windows. Quando isso acontece, a computação é cancelada e os dados são perdidos. Para obter mais informações, consulte Tratamento de TDRs no C++ AMP.