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.
- Acrescenta um número ao nome do arquivo entre parênteses. Por exemplo,
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