Come segnalare un problema con il set di strumenti Visual C++How to Report a Problem with the Visual C++ Toolset

Se si riscontrano problemi con il compilatore, il linker o altri strumenti di Visual C++ è necessario inviare una segnalazione a Microsoft.If you encounter problems with the Visual C++ compiler, linker, or other tools, we want to know about them.

Il modo migliore per segnalare un problema è inviare un report con una descrizione del problema riscontrato, informazioni dettagliate su come viene compilato il programma e parte del codice necessario per riprodurre il problema nei computer Microsoft.The best way to let us know about a problem is to send us a report that includes a description of the problem you've encountered, details about how you're building your program, and some code we can use to reproduce the problem on our own machines. In questo modo è possibile verificare rapidamente se il problema sussiste solo nell'ambiente locale, determinare se ha effetto su altre versioni del compilatore e diagnosticarne la causa.This information lets us quickly verify that the problem exists and is not local to your environment, determine whether it affects other versions of the compiler, and to diagnose its cause.

In questo documento verranno trattati gli argomenti seguentiIn this document, you'll read about

I report sono strumenti importanti per tutti gli sviluppatori.Your reports are important to us and to other developers like you. Grazie per contribuire a migliorare Visual C++.Thank you for helping us improve Visual C++!

Come preparare il report How to prepare your report

È importante creare un report esaustivo in quanto è molto difficile riprodurre il problema riscontrato nei computer utente senza avere informazioni complete.Creating a high-quality report is important because its very difficult to reproduce the problem you encountered on our own machines without complete information. Più il report è completo, più alta è la probabilità che si possa ricreare il problema ed eseguire la diagnosi.The better your report is, the more effectively we are able recreate and diagnose the problem.

Il report deve contenere almeno le informazioni seguentiAt a minimum, your report should contain

  • Informazioni complete sulla versione del set di strumenti usata.The full version information of the toolset you're using.

  • L'intera riga di comando cl.exe usata per compilare il codice.The full cl.exe command line used to build your code.

  • Una descrizione dettagliata del problema riscontrato.A detailed description of the problem you encountered.

  • Una "procedura di riproduzione", vale a dire il codice sorgente che illustra il problema.A 'repro'—source code that demonstrates the problem.

Continuare a leggere per sapere dove trovare le informazioni specifiche necessarie.Read on to learn more about the specific information we need and where you can find it.

Versione del set di strumentiThe toolset version

È necessario comunicare la versione completa del set di strumenti in uso in modo che sia possibile testare la procedura di riproduzione usando lo stesso set di strumenti applicato nei computer utente.We need the full version information of the toolset you're using so that we can test your repro against the same toolset on our machines. Se il problema può essere riprodotto, queste informazioni rappresentano anche un punto di partenza per capire quali altre versioni del set di strumenti presentano lo stesso problema.If we can reproduce the problem, this information also gives us a starting point to investigate which other versions of the toolset exhibit the same problem.

Per segnalare la versione completa del compilatore in usoTo report the full version of the compiler you're using

  1. Premere WINDOWS sulla tastiera e digitare Developer Command Prompt.Press the Windows key on your keyboard and begin typing Developer Command Prompt.

  2. Dall'elenco delle corrispondenze scegliere la versione del prompt dei comandi per gli sviluppatori che corrisponde alla versione di Visual Studio usata.Choose the Developer Command Prompt version that matches the version of Visual Studio you're using when it appears in the list of matches.

  3. Nella console Prompt dei comandi per gli sviluppatori immettere il comando cl /Bv /CLR.In the Developer Command Prompt console, enter the command cl /Bv /CLR.

L'output sarà simile al seguente:The output should look similar to this:

C:\Compiler>cl /Bv /CLR
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.40209
for Microsoft (R) .NET Framework version 4.00.30319.34014
Copyright (C) Microsoft Corporation.  All rights reserved.

Compiler Passes:
 C:\WinCComp\binaries.x86chk\bin\i386\cl.exe:        Version 18.00.40209.0
 C:\WinCComp\binaries.x86chk\bin\i386\c1.dll:        Version 18.00.40209.0
 C:\WinCComp\binaries.x86chk\bin\i386\c1xx.dll:      Version 18.00.40209.0
 C:\WinCComp\binaries.x86chk\bin\i386\c2.dll:        Version 18.00.40209.0
 C:\WinCComp\binaries.x86chk\bin\i386\link.exe:      Version 12.00.40209.0
 C:\WinCComp\binaries.x86chk\bin\i386\mspdb120.dll:  Version 12.00.40209.0
 C:\WinCComp\binaries.x86chk\bin\i386\1033\clui.dll: Version 18.00.40209.0
 Common Language Runtime:                            Version  4.00.30319.34014

cl : Command line error D8003 : missing source filename

Copiare e incollare l'intero output nel report.Copy and paste the entire output into your report.

Riga di comandoThe command line

È necessario specificare l'intera riga di comando (cl.exe e relativi argomenti) che l'utente ha usato per compilare il codice in modo che sia possibile compilare il codice esattamente come nei computer utente.We need the full command line (cl.exe and its arguments) used to build your code so that we can build it in exactly the same way on our machines. Questo passaggio è importante perché il problema riscontrato potrebbe verificarsi solo quando si compila un determinato argomento o una combinazione di argomenti.This is important because the problem you've encountered might only exist when building with a certain argument or combination of arguments.

Per trovare facilmente queste informazioni, vedere il log di compilazione immediatamente dopo che si è verificato il problema.The best place to find this information is in the build log immediately after experiencing the problem. La riga di comando conterrà quindi esattamente gli stessi argomenti che potrebbero essere la causa del problema.This ensures that the command line contains exactly the same arguments that might be contributing to the problem.

Per segnalare i contenuti della riga di comandoTo report the contents of the command line

  1. Individuare il file CL.command.1.tlog e aprirlo.Locate the CL.command.1.tlog file and open it. Per impostazione predefinita, questo file si trova in \...\Visual Studio Version\Projects\SolutionName\ProjectName\Config\ProjectName.tlog\CL.command.1.tlog.By default, this file is located at \...\Visual Studio Version\Projects\SolutionName\ProjectName\Config\ProjectName.tlog\CL.command.1.tlog.

    Il file contiene i nomi dei file del codice sorgente seguiti dagli argomenti della riga di comando usati per la compilazione, disposti su singole righe.Inside this file, you'll find the names of source code files followed by the command line arguments used to compile them, each on separate lines.

  2. Individuare la riga che contiene il nome del file del codice sorgente in cui si verifica il problema. La riga sottostante contiene il comando cl.exe corrispondente e i relativi argomenti.Locate the line that contains the name of the source code file where the problem occurs; the line below it contains the corresponding cl.exe command and its arguments.

Copiare e incollare l'intera riga di comando nel report.Copy and paste the entire command line into your report.

Descrizione del problemaA description of the problem

Per poter visualizzare lo stesso errore che si verifica nei computer utente, è necessario specificare una descrizione dettagliata del problema riscontrato. È talvolta utile anche sapere cosa si stava eseguendo e cosa si prevedeva come risultato.We need a detailed description of the problem you've encountered so that we can verify that we see the same effect on our machines; its also sometimes useful for us to know what you were trying to accomplish, and what you expected to happen.

Specificare i messaggi di errore precisi generati dal set di strumenti, una breve descrizione di ciò che si stava tentando di eseguire per comprendere il codice della procedura di riproduzione e tutti i dettagli che potrebbero essere utili per diagnosticare il problema riscontrato, ad esempio eventuali soluzioni alternative adottate.Please provide the precise error messages given by the toolset, a brief description of what you were trying to accomplish to help us understand your repro code, and any other details that might help us diagnose the problem you experienced, such as any work-arounds you might have found. Non ripetere le informazioni già specificate in altre sezioni del report.Avoid repeating information found elsewhere in your report.

Procedura di riproduzioneThe repro

Perché sia possibile riprodurre l'errore che si è verificato nei computer utente, è necessaria una procedura di riproduzione, vale a dire un esempio di codice sorgente indipendente che illustra il problema riscontrato.We need a repro, a self-contained source code example that demonstrates the problem you've encountered, so that we can reproduce the error on our machines. In base al tipo di problema riscontrato, è necessario scegliere il tipo di procedura di riproduzione da includere nel report.The kind of problem you encounter will determine what kind of repro you should include in your report. Senza una corretta procedura di riproduzione, è impossibile eseguire un'analisi.Without an appropriate repro, we have nothing to investigate.

È possibile includere direttamente nel testo del report procedure di riproduzione di codice sorgente brevi e indipendenti. È invece consigliabile allegare al report procedure di riproduzione di codice più estese.Short, self-contained repros can be directly included in your report text, but larger source code repros should be attached to the report. Le procedure di riproduzione che non possono essere ridotte a un singolo file del codice sorgente devono essere compresse in una directory contenente tutti i file con estensione zip o simile da allegare al report.Repros that can't be reduced to a single source code file should be packaged by compressing a directory containing all the files into a .zip file or similar and attached to the report. Altri dettagli aggiuntivi specifici dello scenario devono essere sempre inclusi nel testo del report, mai nel codice sorgente.Any additional scenario-specific details should always be included in the report text, never in source code.

La procedura di riproduzione migliore è la procedura di riproduzione minima.The best kind of repro you can provide us is a minimal repro. Si tratta di un unico file del codice sorgente indipendente (senza riferimenti a intestazioni utente) che contiene codice a sufficienza per illustrare il problema.This is a single, self-contained source code file (without references to user headers) that contains just enough code to demonstrate the problem. Se possibile, è sufficiente allegare questo file del codice sorgente per segnalare tutte le informazioni necessarie.If you can provide a repro in this form, just attach the source code file to your report; its all we need.

Se non fosse possibile riassumere il problema in una procedura di riproduzione minima senza dipendenze, fare riferimento alle sezioni seguenti per determinare il tipo di procedura di riproduzione da includere nel report.If you can't condense the problem to a minimal repro without dependencies, refer to the following sections to determine the kind of repro you should include in your report.

Arresto anomalo del front-end (parser)Frontend (parser) crash

Gli arresti anomali del front-end si verificano durante la fase di analisi del compilatore.Frontend crashes occur during the parsing phase of the compiler. In genere il compilatore crea l'errore irreversibile C1001 e segnala il file del codice sorgente e il numero della riga in cui si è verificato l'errore. Viene spesso indicato un file msc1.cpp, dettaglio che può essere tuttavia tralasciato.Typically, the compiler will emit Fatal Error C1001 and reference the source code file and line number on which the error occurred; it will often mention a file msc1.cpp, but you can ignore this detail.

Per questo tipo di arresto anomalo, inviare una procedura di riproduzione pre-elaborata.For this kind of crash, please provide a Preprocessed Repro.

Di seguito è riportato un esempio di output del compilatore per questo tipo di arresto anomalo:Here's example compiler output for this kind of crash:

SandBoxHost.cpp
d:\o\dev\search\foundation\common\tools\sandbox\managed\managed.h(929):
        fatal error C1001: An internal error has occurred in the compiler.
(compiler file 'msc1.cpp', line 1369)
To work around this problem, try simplifying or changing the program near the
        locations listed above.
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
d:\o\dev\search\foundation\common\tools\sandbox\managed\managed.h(929):
        note: This diagnostic occurred in the compiler generated function
        'void Microsoft::Ceres::Common::Tools::Sandbox::SandBoxedProcess::Dispose(bool)'
Internal Compiler Error in d:\o\dev\otools\bin\x64\cl.exe.  You will be prompted
        to send an error report to Microsoft later.
INTERNAL COMPILER ERROR in 'd:\o\dev\otools\bin\x64\cl.exe'
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information

Arresto anomalo del back-end (generazione del codice) Backend (code generation) crash

Gli arresti anomali del back-end si verificano durante la fase di generazione del codice del compilatore.Backend crashes occur during the code generation phase of the compiler. In genere il compilatore crea l'errore irreversibile C1001 e non sempre segnala il file del codice sorgente e il numero della riga in cui si è verificato l'errore. Viene spesso indicato un file compiler\utc\src\p2\main.c, dettaglio che può essere tuttavia tralasciato.Typically, the compiler will emit Fatal Error C1001, and might not reference the source code file and line number associated with the problem; it will often mention a file compiler\utc\src\p2\main.c, but you can ignore this detail.

Per questo tipo di arresto anomalo inviare una procedura di riproduzione del collegamento se si usa la Generazione codice in fase di collegamento, diversamente inviare una procedura di riproduzione pre-elaborata.For this kind of crash please provide a Link Repro if you are using Link-Time Code Generation (LTCG) or a Preprocessed Repro if not. La Generazione codice in fase di collegamento è abilitata dall'argomento della riga di comando /GL per cl.exe.LTGC is enabled by the /GL command-line argument to cl.exe.

Di seguito è riportato un esempio di output del compilatore per questo tipo di arresto anomalo in cui la Generazione codice in fase di collegamento non è in uso.Here's example compiler output for this kind of crash in which LTCG is not used. Se l'output del compilatore è simile al seguente è necessario inviare una procedura di riproduzione pre-elaborata.If your compiler output looks like this you should provide a Preprocessed Repro.

repro.cpp
\\officefile\public\tadg\vc14\comperror\repro.cpp(13) : fatal error C1001:
        An internal error has occurred in the compiler.
(compiler file 'f:\dd\vctools\compiler\utc\src\p2\main.c', line 230)
To work around this problem, try simplifying or changing the program near the
        locations listed above.
Please choose the Technical Support command on the Visual C++
Help menu, or open the Technical Support help file for more information
INTERNAL COMPILER ERROR in
        'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\cl.exe'
    Please choose the Technical Support command on the Visual C++
    Help menu, or open the Technical Support help file for more information

Se la riga che inizia con INTERNAL COMPILER ERROR specifica link.exe anziché cl.exe, significa che la Generazione codice in fase di collegamento è stata abilitata ed è necessario inviare una procedura di riproduzione del collegamento.If the line that begins with INTERNAL COMPILER ERROR mentions link.exe, rather than cl.exe, LTCG was enabled and you should provide a Link Repro. Se dal messaggio di errore del compilatore non è chiaro se la Generazione codice in fase di collegamento è stata abilitata, è possibile esaminare gli argomenti della riga di comando copiata dal log di compilazione nel passaggio precedente per l'argomento della riga di comando /GL.If its not clear whether LTCG was enabled from the compiler error message, you may need to examine the command line arguments that you copied from your build log in a previous step for the /GL command-line argument.

Arresto anomalo del linkerLinker crash

Gli arresti anomali del linker si verificano durante la fase di collegamento, dopo l'esecuzione del compilatore.Linker crashes occur during the linking phase, after the compiler has run. In genere il linker crea l'errore strumenti del linker LNK1000.Typically, the linker will emit Linker Tools Error LNK1000.

Nota

Se invece l'output specifica C1001 o include la Generazione codice in fase di collegamento, fare riferimento a Arresto anomalo del back-end (generazione del codice) per altre informazioni.If the output mentions C1001 or involves Link-Time Code Generation, refer to Backend (code generation) crash instead for more information.

Per questo tipo di arresto anomalo, inviare una procedura di riproduzione del collegamento.For this kind of crash, please provide a Link Repro.

Di seguito è riportato un esempio di output del compilatore per questo tipo di arresto anomalo.Here's example compiler output for this kind of crash.

z:\foo.obj : error LNK1000: Internal error during IMAGE::Pass2

  Version 14.00.22816.0

  ExceptionCode            = C0000005
  ExceptionFlags           = 00000000
  ExceptionAddress         = 00007FF73C9ED0E6 (00007FF73C9E0000)
        "z:\tools\bin\x64\link.exe"
  NumberParameters         = 00000002
  ExceptionInformation[ 0] = 0000000000000000
  ExceptionInformation[ 1] = FFFFFFFFFFFFFFFF

CONTEXT:

  Rax    = 0000000000000400  R8     = 0000000000000000
  Rbx    = 000000655DF82580  R9     = 00007FF840D2E490
  Rcx    = 005C006B006F006F  R10    = 000000655F97E690
  Rdx    = 000000655F97E270  R11    = 0000000000000400
  Rsp    = 000000655F97E248  R12    = 0000000000000000
  Rbp    = 000000655F97EFB0  E13    = 0000000000000000
  Rsi    = 000000655DF82580  R14    = 000000655F97F390
  Rdi    = 0000000000000000  R15    = 0000000000000000
  Rip    = 00007FF73C9ED0E6  EFlags = 0000000000010206
  SegCs  = 0000000000000033  SegDs  = 000000000000002B
  SegSs  = 000000000000002B  SegEs  = 000000000000002B
  SegFs  = 0000000000000053  SegGs  = 000000000000002B
  Dr0    = 0000000000000000  Dr3    = 0000000000000000
  Dr1    = 0000000000000000  Dr6    = 0000000000000000
  Dr2    = 0000000000000000  Dr7    = 0000000000000000

Se è abilitato il collegamento incrementale e l'arresto anomalo si è verificato solo dopo il collegamento iniziale, vale a dire solo dopo il primo collegamento completo su cui si basa il collegamento incrementale successivo, inviare anche una copia dei file oggetto (con estensione obj) e libreria (con estensione lib) che corrispondono ai file sorgente che sono stati modificati al completamento del collegamento iniziale.If incremental linking is enabled and the crash occurred only after initial linking—that is, only after the first full linking on which subsequent incremental linking is based—please also provide a copy of the object (.obj) and library (.lib) files that correspond to source files that were modified after the initial linking was completed.

Generazione di codice erratoBad code generation

La generazione di codice errato è un evento raro, che si verifica tuttavia quando il compilatore genera erroneamente codice non corretto che causa l'arresto anomalo dell'applicazione in fase di esecuzione anziché rilevare il problema in fase di compilazione.Bad code generation is rare, but occurs when the compiler mistakenly generates incorrect code that will cause your application to crash at runtime rather than detecting this problem at compile-time. Se si ritiene che il problema determini la generazione di codice errato, organizzare il report come nel caso di Arresto anomalo del back-end (generazione del codice).If you believe the problem you are experiencing results in bad code generation, treat your report the same as a Backend (code generation) crash.

Per questo tipo di arresto anomalo inviare una procedura di riproduzione del collegamento se si usa la Generazione codice in fase di collegamento, diversamente inviare una procedura di riproduzione pre-elaborata.For this kind of crash please provide a Link Repro if you are using Link-Time Code Generation (LTCG) or a Preprocessed Repro if not. La Generazione codice in fase di collegamento è abilitata dall'argomento della riga di comando /GL per cl.exe.LTGC is enabled by the /GL command-line argument to cl.exe.

Modi per inviare il report Ways to send your report

Esistono diversi modi per inviare il report a Microsoft.There are several ways to get your report to us. È possibile usare lo strumento Segnala un problema predefinito di Visual Studio o inviare un messaggio di posta elettronica.You can use Visual Studio's built-in Report a Problem Tool, or email us. La scelta dipende dal tipo di problema riscontrato, da come si vuole interagire con i tecnici che analizzeranno il report e se si vuole tenere traccia dello stato di avanzamento o condividere il report con la community.The best choice for your report depends on the kind of problem you've encountered, how you want to interact with the engineers who will investigate your report, and whether you'd like to track its progress or share your report with the community.

Nota

Indipendentemente dalla modalità di invio del report, Microsoft rispetta la privacy degli utenti.Regardless of how you submit your report, Microsoft respects your privacy. Per informazioni sul trattamento dei dati inviati a Microsoft, vedere l'Informativa sulla privacy della famiglia dei prodotti Microsoft Visual Studio.For information about how we treat the data that you send us, see the Microsoft Visual Studio Product Family Privacy Statement.

Inviare un messaggio di posta elettronicaSend an Email

Per contattare direttamente il team di Visual C++ è anche possibile inviare il report tramite posta elettronica all'indirizzo compilercrash@microsoft.com.Email is another way to send your report directly to the Visual C++ team; you can reach us at compilercrash@microsoft.com.

Se si sceglie di inviare il report tramite posta elettronica, è possibile usare il modello seguente come corpo del messaggio di posta elettronica.If you choose to send your report by email, you can use the following template as the body of your email message. Ricordarsi di allegare il codice sorgente o altri file, se non si includono tali informazioni nel corpo del messaggio di posta elettronica.Don't forget to attach source code or other files if you aren't including that information in the email body.

To: compilercrash@microsoft.com
Subject: Visual C++ Error Report
-----

Compiler version:

CL.EXE command line:

Problem description:

Source code and repro steps:

Usare lo strumento Segnala un problemaUse the Report a Problem tool

Segnala un problema è uno strumento di Visual Studio che consente agli utenti di Visual Studio di segnalare una serie di problemi in pochi clic.The Report a Problem tool in Visual Studio is a way for Visual Studio users to report a variety of problems with just a few clicks. Offre un semplice modulo in cui specificare le informazioni dettagliate sul problema rilevato e consente di inviare il report senza mai uscire dall'IDE.It provides a simple form that you can use to specify detailed information about the problem you've encountered and then submit your report without ever leaving the IDE.

Segnalare il problema tramite lo strumento Segnala un problema non è la scelta più comune per i tipi di problemi che riguardano il set degli strumenti discussi in questo documento. È tuttavia una possibilità che può essere adottata se preferibile ad altre.Reporting your problem through the Report a Problem tool is unusual for the kinds of toolset problems discussed in this document; nevertheless, its an option you can choose if it suites your preferences.

Suggerimento

Per altri tipi di problemi che si possono verificare in Visual Studio e che non sono correlati al set di strumenti, ad esempio problemi con l'interfaccia utente, funzionalità IDE interrotte o arresti anomali generali, lo strumento Segnala un problema può essere un'ottima scelta, grazie alle sue funzionalità di screenshot e alla possibilità di registrare le azioni dell'interfaccia utente responsabili del problema riscontrato.For other kinds of problems you might encounter in Visual Studio that are not related to the toolset (For example, UI issues, broken IDE functionality, or general crashes), the Report a Problem tool can be an especially good choice due to its screenshot capabilities and its ability to record UI actions that lead to the problem you've encountered. Non segnalare mai questi altri tipi di errore tramite l'invio di messaggi di posta elettronica a compilercrash@microsoft.com.You should never report these other kinds of errors by sending email to compilercrash@microsoft.com.

Generare una procedura di riproduzione Generate a repro

Una procedura di riproduzione è un esempio di codice completo e indipendente, che illustra il problema segnalato.A repro is a complete, self-contained code example, that demonstrates the problem you're reporting. Una procedura di riproduzione non è un frammento di codice. Deve invece essere un esempio completo di codice che viene, o dovrebbe, essere compilato, eccezione fatta per gli errori generati dal problema che si segnala.A repro is not a code snippet—it must be a complete example that builds and runs (or would, except for the errors produced by the problem you're reporting). Deve contenere tutte le direttive #include necessarie, anche per le intestazioni standard.It should contain all the necessary #include directives, even for the standard headers.

Caratteristiche di una buona procedura di riproduzioneFurthermore, a good repro is

  • Minima.Minimal. È necessario che le procedure di riproduzione siano minime, ma devono comunque illustrare esattamente il problema riscontrato.Repros should be as small as possible while still demonstrating exactly the problem you encountered. Le procedure di riproduzione non devono essere né complesse né realistiche, devono piuttosto essere semplici e pertinenti.Repros do not need to be complex or realistic—simple, to-the-point repros are better. Non è necessario includere anche esempi di codice funzionante, anche se possono essere aggiunti qualora siano d'ausilio. Essenziale è solo l'esempio di codice che causa il problema.They do not need to include counter-examples of code that works, but may if it is illustrative; only example code that causes the issue is necessary.

  • Indipendente.Self-Contained. È consigliabile non includere nelle procedure di riproduzione dipendenze non necessarie.Repros should avoid unnecessary dependencies. Se possibile, riprodurre il problema senza usare librerie di terzi.If you can reproduce the problem without third-party libraries, please do so. Se possibile, riprodurre il problema senza usare codice di libreria. std::out e printf() sono accettabili.If you can reproduce the problem without any library code (std::out, printf() are ok), please do so. È molto utile ridurre la quantità di codice da analizzare come possibile responsabile del problema.Reducing the amount of code we have to consider as a possible contributor to the problem is enormously helpful to us.

  • Confronto con l'ultima versione del compilerAgainst the latest compiler version. Le procedure di riproduzione devono usare l'ultima versione del set di strumenti quando possibile.Repros should use the latest version of the toolset whenever possible. Molto spesso i problemi che potrebbero ancora verificarsi nelle versioni precedenti del set di strumenti sono stati risolti nelle versioni più recenti.Problems you might still encounter in older versions of the toolset have very often been fixed in newer versions.

  • Confronto con altri compilatori, se pertinente.Checked against other compilers, if relevant. Le procedure di riproduzione che contengono codice C++ portabile devono verificare il comportamento confrontandolo con altri compilatori se possibile.Repros that involve portable C++ code should verify behavior against other compilers if possible.

    Questo passaggio consente di determinare se il codice è corretto, come quando MSVC non è in accordo con Clang e GCC, o se non è corretto, quando invece MSVC, Clang e GCC accettano che il codice generi l'errore.This step helps to determine whether your code is correct, as when MSVC disagrees with Clang and GCC, or incorrect, as when MSVC, Clang, and GCC agree that your code produces the error.

Di seguito sono disponibili le istruzioni per la generazione dei vari tipi di procedure di riproduzione che verranno usate per segnalare i diversi problemi.Below are instructions for generating the various kinds of repros you'll use to report different kinds of problems.

Procedure di riproduzione pre-elaboratePreprocessed repros

Una procedura di riproduzione pre-elaborata è un unico file di origine che illustra un problema e che è stato generato dall'output del preprocessore C durante l'elaborazione del file di origine.A preprocessed repro is a single source file that demonstrates a problem and has been generated from the output of the C preprocessor by processing the original source file. Questo processo comprende le intestazioni incluse per rimuovere le dipendenze da altri file di origine e di intestazione e risolve anche macro, #ifdefs e altri comandi del preprocessore che potrebbero dipendere dall'ambiente locale.This process inlines included headers to remove dependencies on additional source and header files, and also resolves macros, #ifdefs, and other preprocessor commands that could depend your local environment.

Nota

Si noti che le procedure di riproduzione pre-elaborate sono la soluzione meno adatta a segnalare problemi causati probabilmente da bug presenti nell'implementazione della libreria standard. Capita spesso infatti che Microsoft decida di sostituire l'ultima implementazione non definitiva per verificare se il problema è già stato risolto.Note that preprocessed repros are least convenient for problems that might be the result of bugs in our standard library implementation because we will often want to substitute our latest, in-progress implementation to see whether we've already fixed the problem. In questo caso non pre-elaborare la procedure di riproduzione. Se non è possibile ridurre il problema a un solo file di origine, comprimere il codice in un file con estensione zip, o simile, oppure usare una procedure di riproduzione del progetto IDE (vedere la sezione successiva Altre procedure di riproduzione).In this case, don't preprocess the repro, and if you can't reduce the problem to a single source file, package your code into a .zip file or similar, or consider using an IDE project repro (see Other Repros below).

Per pre-elaborare un file del codice sorgenteTo preprocess a source code file

  1. Premere WINDOWS sulla tastiera e digitare Developer Command Prompt.Press the Windows key on your keyboard and begin typing Developer Command Prompt.

  2. Dall'elenco delle corrispondenze scegliere la versione del prompt dei comandi per gli sviluppatori che corrisponde alla versione di Visual Studio usata.Choose the Developer Command Prompt version that matches the version of Visual Studio you're using when it appears in the list of matches.

  3. Nella finestra della console Prompt dei comandi per gli sviluppatori immettere il comando cl /P argumentsfilename.cpp.In the Developer Command Prompt console window, enter the command cl /P argumentsfilename.cpp.

Dopo aver creato il file pre-elaborato (ora nomefile.i), è consigliabile verificare che il problema sia ancora riproducibile usando il file pre-elaborato.After you have the preprocessed file (now filename.i), its a good idea to make sure that the problem still repros using the preprocessed file. È possibile usare l'argomento della riga di comando /TP per indicare a cl.exe di ignorare il passaggio del preprocessore e di tentare la compilazione come di consueto.You can use the /TP command line argument to tell cl.exe to skip the preprocessor step and attempt to compile as usual.

Per confermare che l'errore è ancora riproducibile con il file pre-elaboratoTo confirm that the error still repros with the preprocessed file

  1. Premere WINDOWS sulla tastiera e digitare Developer Command Prompt.Press the Windows key on your keyboard and begin typing Developer Command Prompt.

  2. Dall'elenco delle corrispondenze scegliere la versione del prompt dei comandi per gli sviluppatori che corrisponde alla versione di Visual Studio usata.Choose the Developer Command Prompt version that matches the version of Visual Studio you're using when it appears in the list of matches.

  3. Nella finestra della console Prompt dei comandi per gli sviluppatori immettere il comando cl arguments /TP filename.i.In the Developer Command Prompt console window, enter the command cl arguments /TP filename.i.

  4. Verificare che il problema viene riprodotto.Confirm that the problem is reproduced.

Alla fine allegare questa procedura di riproduzione al report.Finally, attach this repro to your report.

Una procedura di riproduzione del collegamento è una singola directory che contiene gli artefatti di compilazione che insieme illustrano un problema che si verifica in fase di collegamento, ad esempio un arresto anomalo del back-end che coinvolge la Generazione codice in fase di collegamento o un arresto anomalo del linker. La procedura di riproduzione include quegli artefatti di compilazione necessari come input per il linker perché possa riprodurre il problema.A link repro is a single directory containing build artifacts that collectively demonstrate a problem that occurs at link time, such as a backend crash involving Link-Time Code Generation (LTCG), or a linker crash; the included build artifacts are those needed as linker input so that the problem can be reproduced. È possibile creare facilmente le procedure di riproduzione del collegamento tramite le funzionalità disponibili nel linker.Link repros can be created easily by using facilities provided by the linker.

  1. Aprire un prompt dei comandi e immettere il comando mkdir directory per creare una directory per la procedura di riproduzione del collegamento.Open a command prompt and enter the command mkdir directory to create a directory for the link repro.

  2. Impostare la variabile di ambiente link_repro nella directory appena creata. Immettere il comando set link_repro=directory.Set the link_repro environment variable to the directory you just created; enter the command set link_repro=directory.

  3. Se si vuole eseguire la compilazione da Visual Studio, avviarlo dal prompt dei comandi immettendo il comando devenv.If you want to perform the build from inside Visual Studio, launch it from the command prompt by entering the command devenv. In questo modo il valore della variabile di ambiente link_repro sarà visibile in Visual Studio.This ensures that the value of the link_repro environment variable is visible to Visual Studio.

  4. Compilare l'applicazione e confermare che il problema previsto si è verificato.Build your application, and confirm that the expected problem has occurred.

  5. Chiudere ora Visual Studio se è stato avviato nel passaggio 3.Close Visual Studio now if you launched it in step 3.

  6. Cancellare la variabile di ambiente link_repro. Immettere il comando set link_repro=Clear the link_repro environment variable; enter the command set link_repro=

Infine comprimere l'intera directory della procedura di riproduzione in un file con estensione zip o simile e allegarla al report.Finally, package the repro by compressing the entire directory into a .zip file or similar and attach it to your report.

Altre procedure di riproduzioneOther repros

Se il problema non può essere ridotto a un singolo file di origine o a una procedura di riproduzione pre-elaborata, e non è necessaria una procedura di riproduzione del collegamento per testare il problema, è possibile analizzare un progetto IDE.If you can't reduce the problem to a single source file or preprocessed repro, and the problem does not require a link repro, we can investigate and IDE project. Il codice contenuto nel progetto deve essere minimo. Tutto il materiale sussidiario descritto in questo documento è applicabile anche in questo caso.Code inside the project should still be minimal, and all the guidance from this document still applies.

Creare la procedura di riproduzione come progetto IDE minimo, comprimere l'intera struttura della directory in un file con estensione zip o simile e allegarla al report.Create your repro as a minimal IDE project, then package it by compressing the entire directory structure into a .zip file or similar and attach it to your report.