Libreria di funzionalità estese di Visual Studio AddressSanitizer (VCAsan)
Le VCAsan*.lib
librerie implementano le funzionalità dell'IDE del debugger esteso in Visual Studio. Queste funzionalità consentono all'IDE di visualizzare gli errori AddressSanitizer nelle sessioni di debug in tempo reale o offline salvando un file di dump di arresto anomalo del sistema con metadati. La libreria è collegata ogni volta che AddressSanitizer è abilitato dal compilatore MSVC.
Inventario della libreria VCAsan
Opzione di runtime | Libreria di collegamenti VCAsan |
---|---|
/MT |
libvcasan.lib |
/MD |
vcasan.lib |
/MTd |
libvcasand.lib |
/MDd |
vcasand.lib |
Funzionalità della libreria VCAsan
Finestra del report degli errori Rich AddressSanitizer nell'IDE di Visual Studio
La libreria VCAsan registra un callback all'interno del runtime AddressSanitizer usando la funzione __asan_set_error_report_callback
di interfaccia . Se viene generato un report AddressSanitizer, questo callback viene usato per generare un'eccezione rilevata da Visual Studio. Visual Studio usa i dati delle eccezioni per generare il messaggio visualizzato all'utente nell'IDE.
Nota
La libreria VCAsan registra una funzione di callback nel runtime AddressSanitizer. Se il codice chiama questa funzione di registrazione una seconda volta, sovrascrive la registrazione del callback della libreria VCAsan. Ciò comporta la perdita di tutta l'integrazione dell'IDE di Visual Studio. Si tornerà all'esperienza utente dell'IDE predefinita. È anche possibile che la chiamata di un utente registri il callback persi. In caso di problemi, inviare un bug.
Salvare gli errori AddressSanitizer in un nuovo tipo di file dump di arresto anomalo del sistema
Quando si collega la libreria VCAsan al file eseguibile, gli utenti possono abilitarlo per generare un dump di arresto anomalo in fase di esecuzione. Il runtime AddressSanitizer genera quindi un file dump quando si verifica un errore diagnosticato. Per abilitare questa funzionalità, l'utente imposta la ASAN_SAVE_DUMPS
variabile di ambiente usando un comando come questo:
set ASAN_SAVE_DUMPS=MyFileName.dmp
Il file deve avere un'estensione .dmp
per seguire le convenzioni dell'IDE di Visual Studio. (Prima della 17.7)
Ecco cosa accade quando viene specificato un file di dump per ASAN_SAVE_DUMPS
: se un errore viene rilevato dal runtime AddressSanitizer, salva un file di dump di arresto anomalo del sistema con i metadati associati all'errore. Il debugger in Visual Studio versione 16.9 e successive può analizzare i metadati salvati nel file di dump. È possibile impostare ASAN_SAVE_DUMPS
in base al test, archiviare questi artefatti binari e quindi visualizzarli nell'IDE con l'indicizzazione di origine appropriata.
Visual Studio versione 17.7 e successive supporta quanto segue:
Le stringhe tra virgolette vengono ora gestite correttamente. Nelle versioni precedenti, per gli ambienti all'interno di Visual Studio o quando si usa PowerShell, l'impostazione della variabile di ambiente in modo da contenere virgolette o spazi non riuscirebbe a creare il file di dump previsto.
Quando l'estensione
.dmp
viene specificata in modo esplicito ,set ASAN_SAVE_DUMPS=MyDmp.dmp
ad esempio , VCAsan lo usa in modo esplicito e non aggiungerà un ID processo associato al nome del file di dump.Se esiste già un
.dmp
file con lo stesso nome specificato dalla variabile di ambiente, VCAsan modifica il nome del file come indicato di seguito:- Aggiunge un numero al nome file tra parentesi. Ad esempio:
Myfile (1).dmp
. - Se dopo diversi tentativi di accodamento di un numero tra parentesi non riesce a generare un nome univoco, il file viene salvato in un
%APPLOCAL%
percorso temporaneo che verrà stampato da VCAsan. Ad esempio:C:\Users\~\AppData\Local\Temp\Dump.dmp
. - Se il salvataggio in un percorso temporaneo non riesce, viene visualizzato un errore di diagnostica.
- Aggiunge un numero al nome file tra parentesi. Ad esempio:
Vedi anche
Panoramica di AddressSanitizer
Problemi noti di AddressSanitizer
Riferimento alla compilazione e al linguaggio AddressSanitizer
Informazioni di riferimento sul runtime AddressSanitizer
Byte ombreggiatura AddressSanitizer
AddressSanitizer cloud o test distribuiti
Esempi di errore addressSanitizer