Partilhar via


Biblioteca de funcionalidades estendidas do AddressSanitizer do Visual Studio (VCAsan)

As bibliotecas VCAsan*.lib implementam recursos estendidos de IDE do depurador no Visual Studio. Esses recursos permitem que o IDE mostre erros do AddressSanitizer em sessões de depuração ao vivo ou offline salvando um arquivo de despejo de memória com metadados. A biblioteca é vinculada sempre que AddressSanitizer é habilitado pelo compilador MSVC.

Inventário da biblioteca VCAsan

Opção de runtime Biblioteca de links VCAsan
/MT libvcasan.lib
/MD vcasan.lib
/MTd libvcasand.lib
/MDd vcasand.lib

Recursos da biblioteca VCAsan

Janela do relatório de erros avançado do AddressSanitizer no IDE do Visual Studio

A biblioteca VCAsan registra um retorno de chamada no runtime do AddressSanitizer usando a função de interface __asan_set_error_report_callback. Se um relatório do AddressSanitizer for gerado, esse retorno de chamada será usado para gerar uma exceção capturada pelo Visual Studio. O Visual Studio usa os dados de exceção para gerar a mensagem exibida ao usuário no IDE.

Observação

A biblioteca VCAsan registra uma função de retorno de chamada no runtime do AddressSanitizer. Se o código chamar essa função de registro uma segunda vez, ela substituirá o registro de retorno de chamada da biblioteca VCAsan. Isso resulta na perda de toda a integração do IDE do Visual Studio. Você reverterá para a experiência de usuário padrão do IDE. Também é possível que a chamada de um usuário que registra o retorno de chamada seja perdida. Se encontrar algum problema, registre um bug.

Salvar erros do AddressSanitizer em um novo tipo de arquivo de despejo de memória

Quando você vincula a biblioteca VCAsan ao executável, os usuários podem habilitá-la para gerar um despejo de memória no runtime. Em seguida, o runtime do AddressSanitizer produz um arquivo de despejo quando ocorre um erro diagnosticado. Para habilitar esse recurso, o usuário define a variável de ambiente ASAN_SAVE_DUMPS usando um comando como este:

set ASAN_SAVE_DUMPS=MyFileName.dmp

O arquivo deve ter uma .dmp extensão para seguir as convenções do IDE do Visual Studio. (Antes da versão 17.7)

Veja o que acontece quando um arquivo de despejo é especificado para ASAN_SAVE_DUMPS: se um erro for pego pelo runtime do AddressSanitizer, ele salvará um arquivo de despejo de memória que tem os metadados associados ao erro. O depurador no Visual Studio versão 16.9 e posterior pode analisar os metadados salvos no arquivo de despejo. Você pode definir ASAN_SAVE_DUMPS por teste, armazenar esses artefatos binários e exibi-los no IDE com indexação de origem adequada.

O Visual Studio versão 17.7 e posterior dá suporte ao seguinte:

  • As cadeias de caracteres entre aspas agora são tratadas corretamente. Nas versões anteriores, para ambientes dentro do Visual Studio ou ao usar o PowerShell, definir a variável de ambiente para conter aspas ou espaços não criaria o arquivo de despejo esperado.

  • Quando a .dmp extensão é especificada explicitamente (por exemplo, set ASAN_SAVE_DUMPS=MyDmp.dmp), o VCAsan a usa explicitamente e não adicionará um ID de processo associado ao nome do arquivo de dump.

  • Se já existir um .dmp ficheiro com o mesmo nome especificado a partir da variável de ambiente, o VCAsan modifica o nome do ficheiro da seguinte forma:

    • Acrescenta um número ao nome do arquivo entre parênteses. Por exemplo, Myfile (1).dmp.
    • Se após várias tentativas anexar um número entre parênteses não conseguir gerar um nome exclusivo, o arquivo será salvo em um %APPLOCAL% caminho temporário que o VCAsan imprimirá. Por exemplo, C:\Users\~\AppData\Local\Temp\Dump.dmp.
    • Se o salvamento em um caminho temporário falhar, um erro de diagnóstico será exibido.

Confira também

Visão geral do AddressSanitizer
Problemas conhecidos do AddressSanitizer
Referência de linguagem e build do AddressSanitizer
Referência de runtime do AddressSanitizer
Bytes de sombra de AddressSanitizer
Nuvem do AddressSanitizer ou teste distribuído
Exemplos de erro do AddressSanitizer