Condividi tramite


Configurare progetti Linux per l'uso di Address Sanitizer

In Visual Studio 2019 versione 16.1 il supporto di AddressSanitizer (ASan) è integrato nei progetti Linux. È possibile abilitare Address Sanitizer sia per i progetti Linux basati su MSBuild che per i progetti CMake. L'abilitazione di Address Sanitizer è valida sia nei sistemi Linux remoti che in Sottosistema Windows per Linux (WSL).

Informazioni su Address Sanitizer

Address Sanitizer è un rilevatore di errori di memoria in runtime per C /C++ che intercetta gli errori seguenti:

  • Uso dopo la liberazione (riferimento a un puntatore tralasciato)
  • Sovraccarico del buffer dell'heap
  • Sovraccarico del buffer dello stack
  • Uso dopo il ritorno
  • Uso dopo l'ambito
  • Bug dell'ordine di inizializzazione

Quando Address Sanitizer rileva un errore, arresta l'esecuzione immediatamente. Se si esegue un programma abilitato per Address Sanitizer nel debugger, viene visualizzato un messaggio che descrive il tipo di errore, l'indirizzo di memoria e la posizione in cui l'errore si è verificato nel file sorgente:

Screenshot che mostra il messaggio di errore del servizio di purificazione dell'indirizzo: l'heap viene usato gratuitamente.

È anche possibile visualizzare l'output di Address Sanitizer completo, incluso il punto in cui la memoria danneggiata è stata allocata o deallocata, nel riquadro Debug della finestra di output.

Abilitare Address Sanitizer per progetti Linux basati su MSBuild

Nota

A partire da Visual Studio 2019 versione 16.4, AddressSanitizer per i progetti Linux è abilitato tramite Proprietà di configurazione proprietà progetto C/C++Enable Address Sanitizer.Starting in Visual Studio 2019 version 16.4, AddressSanitizer for Linux projects is enabled via Project properties>Configuration Properties>Enable Address Sanitizer.

Per abilitare Address Sanitizer per progetti Linux basati su MSBuild, fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e selezionare Proprietà. Passare quindi a Proprietà di configurazione>C/C++>Sanitizer. L'abilitazione di Address Sanitizer viene eseguita tramite flag del compilatore e del linker. Perché funzioni, è necessario ricompilare il progetto.

Screenshot della pagina delle proprietà del progetto con proprietà > di configurazione C/C più > più Sanificatori selezionati. Abilitare Address Sanitizer è impostato su Sì.

È possibile passare flag di runtime di Address Sanitizer facoltativi da Proprietà di configurazione>Debug>Flag di runtime di AddressSanitizer. Fare clic sulla freccia giù per aggiungere o rimuovere flag.

Screenshot della pagina delle proprietà del progetto con l'opzione Debug proprietà > di configurazione selezionata. Address Sanitizer Runtime Flags è detect_leaks = 0.

Abilitare Address Sanitizer per progetti CMake di Visual Studio

Nota

Per compilare con i set di impostazioni di CMake, abilitare prima ASan nel file CMakeLists.txt. Per altre informazioni, vedere Abilitare AddressSanitizer per Windows e Linux.

Per abilitare ASan per CMake, fare clic con il pulsante destro del CMakeLists.txt mouse sul file in Esplora soluzioni e scegliere Impostazioni CMake per Progetto.

Assicurarsi di aver selezionato una configurazione Linux (ad esempio, Linux-Debug) nel riquadro sinistro della finestra di dialogo:

Screenshot del riquadro Configurazioni con debug x64 e Debug Linux elencato come opzioni.

Le opzioni di Address Sanitizer sono in Generali. Immettere i flag di runtime ASan nel formato "flag=value", separati da spazi. L'interfaccia utente suggerisce erroneamente l'uso di punti e virgola. Usare spazi o due punti per separare i flag.

Screenshot dell'opzione Enable Address Sanitizer che mostra alcuni flag di runtime di Address Sanitizer, ad esempio detect_leaks=0.

Installare i simboli di debug di Address Sanitizer

Per abilitare la diagnostica di Address Sanitizer, è necessario installare i relativi simboli di debug (libasan-dbg) nel computer Linux remoto o nell'installazione di WSL. La versione di libasan-dbg caricata dipende dalla versione di GCC installata nel computer Linux:

Versione Address Sanitizer Versione GCC
libasan0 gcc-4.8
libasan2 gcc-5
libasan3 gcc-6
libasan4 gcc-7
libasan5 gcc-8

È possibile determinare la versione di GCC disponibile usando questo comando:

gcc --version

Per visualizzare la versione di libasan-dbg necessaria, eseguire il programma e quindi esaminare il riquadro Debug della finestra Output. La versione di Address Sanitizer caricata corrisponde alla versione di libasan-dbg necessaria nel computer Linux. È possibile usare Ctrl + F per cercare "libasan" nella finestra. Se si ha libasan4, ad esempio, viene visualizzata una riga come la seguente:

Loaded '/usr/lib/x86_64-linux-gnu/libasan.so.4'. Symbols loaded.

È possibile installare i bit di debug di Address Sanitizer nelle distribuzioni Linux che usano apt con il comando seguente. Questo comando installa la versione 4:

sudo apt-get install libasan4-dbg

Le istruzioni complete per l'installazione dei pacchetti di simboli di debug in Ubuntu sono disponibili in Pacchetti di simboli di debug.

Se è stata eseguita l'abilitazione di Address Sanitizer, nella parte superiore del riquadro Debug della finestra Output Visual Studio chiede di installare i simboli di debug di Address Sanitizer.