- Incompatibilidades de alloc/dealloc e de tipo em new/delete
- Alocações grandes demais para o heap
- Estouro de calloc e estouro de alloca
- Liberação dupla e uso após liberação
- Estouro de variável global
- Estouro de buffer do heap
- Alinhamento inválido de valores alinhados
- Sobreposição de parâmetros de memcpy e strncat
- Estouro e estouro negativo de buffer da pilha
- Uso da pilha após o retorno e uso após o escopo
- Uso de memória depois de envenenada
Habilitar o ASan no compilador
O Address Sanitizer é integrado ao sistema de projetos do Visual Studio, ao sistema de build CMake e ao IDE. Os projetos podem habilitar o AddressSanitizer usando uma opção extra do compilador,/fsanitize=address, ou definindo uma propriedade de projeto no Visual Studio:

Essa opção é compatível com todos os níveis de otimização e configurações de x64. No entanto, ela é incompatível com
edit-and-continue, incremental linking e /RTC, que precisam ser desabilitados antes de compilar com o ASan.$(VC_LibraryPath_VC_x64) é o último da lista para evitar que ele seja usado para outras bibliotecas, conforme mostrado abaixo:

Requisitos de tempo de execução do ASan
Quando um jogo é compilado com o ASan habilitado, ele requer que uma DLL adicional esteja presente em tempo de execução para habilitar a funcionalidade. Por padrão, quando o ASan é habilitado no compilador, ele copia a DLL para o diretório de saída do seu projeto, e ela deve então ser implantada no console ao lado do executável. Se necessário, as DLLs podem ser encontradas manualmente no diretório$(VC_ExecutablePath_x64) do Visual Studio. O XBOX requer uma destas duas, dependendo da versão do build:
Suporte ao depurador em tempo de execução
Ao executar um jogo com o ASan habilitado e um depurador anexado, se um erro for encontrado, a execução será interrompida no depurador e um relatório detalhado será exibido, permitindo determinar onde o erro ocorreu. Mas, se você estiver executando sem um depurador anexado, em uma estrutura de testes automatizados, por exemplo, as informações do erro serão exibidas na saída padrão e o jogo será encerrado. Isso pode ser útil, mas talvez você precise de mais informações de estado para encontrar a causa raiz da falha, e é aí que entra o suporte a despejos de falha.Se você estiver executando sem um depurador anexado e precisar que os símbolos sejam resolvidos nesse momento, será necessário implantar o arquivo
llvm-symbolizer.exe junto com o EXE do seu jogo. Esse arquivo pode ser encontrado no mesmo local que as DLLs de tempo de execução do ASan listadas acima.Suporte a despejos de falha em tempo de execução
A partir do Visual Studio 16.9.8 ou 16.10.2, o ASan pode ser configurado para salvar um arquivo de despejo de falha que contém os metadados associados ao erro. O depurador do Visual Studio pode analisar os metadados salvos no arquivo de despejo para fornecer mais contexto sobre a falha. Você pode configurar o salvamento desses despejos de falha por build, armazenar esses artefatos binários e depois exibi-los no IDE com a indexação de código-fonte adequada. A documentação sobre despejos de falha pode ser encontrada aqui: Configuring Crash Dumps (Microsoft Docs) Mas a abordagem vinculada acima requer a definição de uma variável de ambiente, o que não tem suporte no XBOX, por isso foi implementado um método alternativo. Para adicionar suporte a despejos de falha ao seu título XBOX, basta definir um retorno de chamada de função que forneça ao ASan as informações de nome de arquivo do despejo de falha necessárias. Três exemplos são mostrados abaixo.O nome do arquivo geralmente tem o sufixo .dmp para seguir as convenções do IDE do Visual Studio
Assim como a função anterior, essa substituição é opcional no XBOX, mas é altamente recomendada se você quiser usar despejos de falha para coletar informações do ASan sem um depurador anexado. Se você fornecer o nome do arquivo de despejo, mas não uma substituição do tipo de despejo, a geração de um despejo de falha válido no XBOX falhará.
Exemplo de código do ASan
Este código demonstra como essas funções podem ser facilmente adicionadas a uma base de código existente e adaptadas conforme necessário:Problemas conhecidos
- O ASan do Visual Studio 2019 (16.11) não é compatível com o Game OS.
- A DLL do ASan não é compatível com o Game OS e não será carregada nas versões iniciais do 17.12 e do 17.13. Isso foi corrigido a partir do 17.12.6 e do 17.13.3.
- Uma regressão no suporte do ASan ao Game OS, que resultava em uma falha na inicialização com o Visual Studio 2022, foi corrigida no 17.14.29 e, no Visual Studio 2026, no 18.4.1.
- No depurador, ao executar no XBOX, a seguinte mensagem de exceção será emitida em intervalos regulares, mas pode ser ignorada com segurança.
