Condividi tramite


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

  1. Assicurarsi che l'IDE del debugger sia in grado di trovare i file PDB e di origine.

  2. 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.

    Screenshot del menu File Apri file in Visual Studio.

    La schermata mostrata qui richiede un altro passaggio per abilitare l'accesso IDE ai simboli e all'origine.

  3. Impostare i percorsi dei simboli e quindi scegliere Debug con solo nativo.

    Screenshot della visualizzazione Riepilogo minidump in Visual Studio.

Questo screenshot mostra il file di dump caricato finale, con origini e metadati AddressSanitizer caricati.

Screenshot del debugger che mostra i file di origine e i metadati AddressSanitizer.

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:

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