AddressSanitizer cloud o test distribuiti
Non è necessario eseguire il debug degli errori AddressSanitizer quando e dove si verificano. Configurare il runtime per creare un dump di arresto anomalo che archivia tutti i contesti specifici di AddressSanitizer quando si verifica un errore. Inviare quindi il dump di arresto anomalo a un altro PC per il debug. Il debug offline può essere un timeaver critico quando si esegue AddressSanitizer nel cloud o nei test distribuiti. È possibile creare il dump sull'infrastruttura di test o produzione in cui si verifica l'errore ed eseguirne il debug in un secondo momento nel PC per sviluppatori.
Il debugger di Visual Studio fornisce errori AddressSanitizer diagnosticati con precisione. È possibile visualizzare questi bug senza dover rieseguire test, copiare set di dati enormi, individuare dati persi o trovare computer di test offline. È sufficiente caricare il dump di arresto anomalo del sistema.
I dump di arresto anomalo vengono creati in caso di errori addressSanitizer impostando la variabile di ambiente seguente:
set ASAN_SAVE_DUMPS=MyFileName.dmp
Nota
Il nome file deve avere un suffisso .dmp
per seguire le convenzioni di denominazione di Visual Studio.
Questo file di dump può essere visualizzato usando Visual Studio in un secondo momento in un altro computer.
Visual Studio può visualizzare le informazioni sull'errore nel contesto del codice sorgente originale. A tale scopo, Visual Studio richiede il debug di simboli e codice sorgente indicizzato. Per un'esperienza di debug ottimale, il file EXE, il PDB e il codice sorgente usati per produrre tali file binari devono corrispondere.
Per altre informazioni sull'archiviazione di origini e simboli, vedere la sezione origine e simboli . Per informazioni sui dettagli di implementazione e sul controllo granulare, vedere Integrazione del debugger.
Esempio: compilazione, test e analisi
Si considerino tre computer: A, B e C. Le compilazioni vengono eseguite nel computer B, i test vengono eseguiti nel computer C e si analizzano gli errori nel computer A. Gli errori vengono segnalati in base ai numeri di riga e colonna di origine nel codice sorgente. È possibile visualizzare lo stack di chiamate insieme a un set di simboli nel file PDB prodotto usando tale versione esatta del codice sorgente.
I passaggi seguenti sono relativi a scenari locali o distribuiti che portano alla creazione di un file .dmp e per visualizzare il file di dump AddressSanitizer offline.
Produrre un .dmp in locale
- Build
- Testare l'eseguibile
- Copiare un file .dmp generato nella directory di compilazione
- Aprire il file .dmp con il file con estensione pdb associato, nella stessa directory
Produrre un .dmp in un sistema distribuito
- Compilare e post-elaborare il PDB per i blocchi di dati di indicizzazione di origine
- Copiare la coppia atomica di (.exe, pdb) nel computer di test ed eseguire test
- Scrivere le coppie atomico di (con estensione pdb, .dmp) nel database di segnalazione bug
- Visual Studio apre un file .dmp con il file con estensione pdb associato, nella stessa directory
Nota
Il computer di Visual Studio 2019 usato per l'analisi deve avere accesso a GitHub o all'interno \\Machine\share
in cui è archiviata l'origine indicizzata.
Visualizzare i file di .dmp AddressSanitizer
Assicurarsi che l'IDE del debugger sia in grado di trovare i file PDB e di origine.
Aprire Visual Studio e selezionare Continua senza codice. Selezionare quindi File>Apri>file per aprire la finestra di dialogo Apri file. Assicurarsi che il suffisso del nome file sia .dmp.
La schermata mostrata qui richiede un altro passaggio per abilitare l'accesso IDE ai simboli e all'origine.
Impostare i percorsi dei simboli e quindi scegliere Debug con solo nativo.
Questo screenshot mostra il file di dump caricato finale, con origini e metadati AddressSanitizer caricati.
Origine e simboli
Il server di origine consente a un client di recuperare la versione esatta dei file di origine usati per compilare un'applicazione. Il codice sorgente per un eseguibile o una DLL può cambiare nel tempo e tra le versioni. È possibile usarlo per esaminare lo stesso codice sorgente che ha compilato una determinata versione dell'applicazione.
Durante il debug di un file EXE con il relativo file PDB, il debugger può usare il blocco di dati del server di origine incorporato per recuperare i file appropriati dal controllo del codice sorgente. Carica automaticamente i file che eseguono il mapping ai nomi completi inseriti nel PDB dall'opzione del /Zi
compilatore.
Per usare il server di origine, l'applicazione deve essere "indicizzata di origine" usando pdbstr.exe
per scrivere un srcsrv
blocco di dati nel file PDB. Per altre informazioni, vedere la sezione Blocco dati del server di origine e dell'indicizzazione di origine. Sono disponibili anche i passaggi per indicizzare le origini e pubblicare simboli e come specificare simboli e codice sorgente per il debugger .
Per la documentazione esterna, vedere:
- Indicizzazione di origine con Git
- Guida al debug più semplice
- L'indicizzazione di origine è Sottoutilizza impressionante
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
Integrazione del debugger AddressSanitizer
Esempi di errore addressSanitizer