Jak nahlásit problém se sadou nástrojů microsoft C++ nebo dokumentací

Pokud v kompilátoru Microsoft C++ (MSVC), linkeru nebo jiných nástrojích a knihovnách zjistíte problémy, chceme o nich vědět. Pokud je problém v naší dokumentaci, chceme o tom také vědět.

Hlášení problému se sadou nástrojů C++

Nejlepší způsob, jak nám dát vědět o problému, je poslat nám zprávu, která obsahuje popis problému, který jste zjistili. Měl by obsahovat všechny podrobnosti o tom, jak svůj program sestavíte. A mělo by se jednat o reprodukci, kompletní testovací případ, který můžeme použít k reprodukci problému na vlastních počítačích. Tyto informace nám umožňují rychle ověřit, že problém v našem kódu existuje a že není místní pro vaše prostředí. Pomáhá nám určit, jestli ovlivňuje jiné verze kompilátoru, a diagnostikovat jeho příčinu.

V následujících částech si přečtěte, co dělá dobrou sestavu. Popisujeme, jak vygenerovat reprodukci pro typ zjištěného problému a jak odeslat sestavu produktovému týmu. Vaše sestavy jsou pro nás a pro ostatní vývojáře, jako jste vy, důležité. Děkujeme, že nám pomáháte vylepšovat Microsoft C++!

Příprava sestavy

Je důležité vytvořit vysoce kvalitní sestavu, protože je pro nás obtížné reprodukovat problém, který jste našli bez úplných informací. Čím je vaše sestava lepší, tím efektivněji můžeme problém znovu vytvořit a diagnostikovat.

Sestava by měla obsahovat minimálně:

  • Úplné informace o verzi sady nástrojů, kterou používáte.

  • Úplný cl.exe příkazový řádek použitý k sestavení kódu.

  • Podrobný popis problému, který jste našli.

  • Reprodukce: úplný, zjednodušený příklad zdrojového kódu, který ukazuje problém.

Přečtěte si další informace o konkrétních informacích, které potřebujeme, a o tom, kde je najdete, a o tom, jak vytvořit dobrou reprodukci.

Verze sady nástrojů

Potřebujeme úplné informace o verzi a cílovou architekturu sady nástrojů, která problém způsobuje. To je proto, abychom mohli otestovat vaše opakování na stejných sadách nástrojů na našich počítačích. Pokud můžeme problém reprodukovat, tyto informace nám také poskytují výchozí bod, abychom zjistili, které jiné verze sady nástrojů mají stejný problém.

Hlášení úplné verze kompilátoru

  1. Otevřete příkazový řádek pro vývojáře, který odpovídá architektuře konfigurace a verze sady Visual Studio použité k sestavení projektu. Pokud například sestavíte pomocí sady Visual Studio 2017 pro cíle x64 pro x64, zvolte příkazový řádek nástrojů x64 Native Tools pro VS 2017. Další informace najdete v tématu Klávesové zkratky příkazového řádku pro vývojáře.

  2. V okně konzoly příkazového řádku pro vývojáře zadejte příkaz cl /Bv.

Výstup by měl vypadat nějak takto:

C:\Users\username\Source>cl /Bv
Microsoft (R) C/C++ Optimizing Compiler Version 19.14.26428.1 for x86
Copyright (C) Microsoft Corporation.  All rights reserved.

Compiler Passes:
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\cl.exe:        Version 19.14.26428.1
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\c1.dll:        Version 19.14.26428.1
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\c1xx.dll:      Version 19.14.26428.1
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\c2.dll:        Version 19.14.26428.1
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\link.exe:      Version 14.14.26428.1
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\mspdb140.dll:  Version 14.14.26428.1
 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.14.26428\bin\HostX86\x86\1033\clui.dll: Version 19.14.26428.1

cl : Command line error D8003 : missing source filename

Zkopírujte a vložte celý výstup do sestavy.

Příkazový řádek

K sestavení kódu potřebujeme přesný příkazový řádek, cl.exe a všechny jeho argumenty. To je proto, abychom ho mohli sestavit úplně stejným způsobem na našich počítačích. Je důležité, protože nalezený problém může existovat pouze při sestavování s určitým argumentem nebo kombinací argumentů.

Nejlepší místo, kde tyto informace najít, je v protokolu sestavení hned po zjištění problému. Zajišťuje, že příkazový řádek obsahuje přesně stejné argumenty, které by mohly přispět k problému.

Sestava obsahu příkazového řádku

  1. Vyhledejte soubor CL.command.1.tlog a otevřete ho. Ve výchozím nastavení se tento soubor nachází ve složce Dokumenty ve složce \Visual Studio version\Projects\SolutionName ProjectName\Configuration\ProjectName.tlog\\CL.command.1.tlog nebo ve složce Uživatel ve složce \Source\Repos\SolutionName\ProjectName\Configuration\ProjectName.tlog\CL.command.1.tlog. Pokud používáte jiný systém sestavení nebo jste změnili výchozí umístění projektu, může být v jiném umístění.

    V tomto souboru najděte názvy souborů zdrojového kódu následované argumenty příkazového řádku, které se používají k jejich kompilaci, a to na samostatných řádcích.

  2. Vyhledejte řádek, který obsahuje název souboru zdrojového kódu, ve kterém k problému dochází. Řádek pod ním obsahuje odpovídající cl.exe argumenty příkazu.

Zkopírujte a vložte celý příkazový řádek do sestavy.

Popis problému

Potřebujeme podrobný popis zjištěného problému. To znamená, že můžeme ověřit, že na našich počítačích vidíme stejný účinek. Někdy je také užitečné vědět, co jste se snažili dosáhnout a co jste očekávali.

Dobrý popis poskytuje přesné chybové zprávy zadané sadou nástrojů nebo přesné chování modulu runtime, které vidíte. Tyto informace potřebujeme k ověření, že jsme problém správně reprodukovali. Zahrňte všechny výstupy kompilátoru, nejen poslední chybovou zprávu. Musíme vidět všechno, co vedlo k problému, který nahlásíte. Pokud můžete problém duplikovat pomocí kompilátoru příkazového řádku, je upřednostňovaný výstup kompilátoru. Integrované vývojové prostředí (IDE) a další systémy sestavení můžou filtrovat chybové zprávy, které vidíte, nebo zachytit pouze první řádek chybové zprávy.

Pokud problém spočívá v tom, že kompilátor přijímá neplatný kód a negeneruje diagnostiku, zahrňte ji do sestavy.

Pokud chcete nahlásit problém s chováním za běhu, uveďte přesnou kopii toho, co program vytiskne a co očekáváte. V ideálním případě ho vložte do samotného výstupního příkazu, printf("This should be 5: %d\n", actual_result);například . Pokud se váš program chybově ukončí nebo přestane reagovat, uveďte to také.

Přidejte další podrobnosti, které nám můžou pomoct s diagnostikou zjištěného problému, například jakékoli zjištěné alternativní řešení. Zkuste opakovat informace nalezené jinde v sestavě.

Reproce

Reproproce je kompletní příklad zdrojového kódu, který obsahuje vlastní kód. Reprodukovatelně ukazuje problém, který jste našli, a proto název. Potřebujeme reprodukci, abychom mohli chybu reprodukovat na našich počítačích. Kód by měl být dostatečný sám pro vytvoření základního spustitelného souboru, který se zkompiluje a spustí. Nebo by se to zkompilovalo a spustilo, pokud ne kvůli problému, který jste našli. Repropro není fragment kódu. Měl by mít kompletní funkce a třídy a obsahovat všechny nezbytné #include direktivy, i pro standardní hlavičky.

Co dělá dobrou repropro

Dobrá reproce je:

  • Minimální. Repros by měl být co nejmenší, ale přesto stále ukazuje přesně problém, který jste našli. Repros nemusí být složitý ani realistický. Potřebují jenom zobrazit kód, který odpovídá standardu, nebo k zdokumentované implementaci kompilátoru. V případě chybějící diagnostiky by vaše repropro měla zobrazit kód, který nevyhovuje. Jednoduché, to-the-point repros, které obsahují pouze dostatek kódu k předvedení problému jsou nejlepší. Pokud můžete kód odstranit nebo zjednodušit a zůstat v souladu, a také ponechat problém beze změny, udělejte to. Nemusíte zadávat příklady kódu, který funguje.

  • Soběstačný. Opakování by se mělo vyhnout zbytečným závislostem. Pokud můžete problém reprodukovat bez knihoven třetích stran, udělejte to. Pokud můžete problém reprodukovat bez kódu knihovny kromě jednoduchých výstupních příkazů (například puts("this shouldn't compile");, std::cout << value;a printf("%d\n", value);), udělejte to. Je ideální, pokud je možné příklad zkondenzovat na jeden soubor zdrojového kódu bez odkazu na záhlaví uživatele. Snížení množství kódu, který musíme zvážit jako možný přispěvatel problému, je pro nás nesmírně užitečné.

  • Proti nejnovější verzi kompilátoru. Funkce Repros by měla používat nejnovější aktualizaci na nejnovější verzi sady nástrojů, kdykoli je to možné. Nebo použijte nejnovější předběžnou verzi příští aktualizace nebo příští hlavní verze. Problémy, které můžete najít ve starších verzích sady nástrojů, jsou často opravené v novějších verzích. Opravy se přeportují do starších verzí pouze za výjimečných okolností.

  • V případě potřeby se kontrolují jiné kompilátory . Repros, který zahrnuje přenosný kód C++, by měl ověřit chování vůči jiným kompilátorům, pokud je to možné. Standard C++ nakonec určuje správnost programu a žádný kompilátor není dokonalý. Pokud však Clang a GCC přijímají váš kód bez diagnostiky a MSVC ne, pravděpodobně jste v našem kompilátoru našli chybu. (Další možnosti zahrnují rozdíly v chování systémů Unix a Windows nebo různé úrovně implementace standardů C++ atd.) Když všechny kompilátory váš kód zamítnou, je pravděpodobné, že váš kód není správný. Zobrazení různých chybových zpráv vám může pomoct s diagnostikou problému sami.

    Seznamy online kompilátorů pro testování kódu v kompilátorech jazyka C++ Online najdete na webu ISO C++ nebo v tomto kurátorovaném seznamu kompilátorů jazyka C++ online na GitHubu. Mezi konkrétní příklady patří Wandbox a Compiler Explorer.

    Poznámka:

    Online weby kompilátoru nejsou přidruženy k Microsoftu. Mnoho online webů kompilátoru se spouští jako osobní projekty. Některé z těchto webů můžou být při čtení nedostupné, ale hledání by mělo najít jiné, které můžete použít.

Problémy v kompilátoru, linkeru a knihovnách se obvykle zobrazují určitými způsoby. Druh problému, který zjistíte, určí, jaký druh opakování byste měli zahrnout do sestavy. Bez vhodného opakování nemusíme nic prošetřit. Tady je několik druhů problémů, se kterými se můžete setkat. Zahrneme pokyny, jak vygenerovat druh opakování, který byste měli použít k hlášení jednotlivých problémů.

Chyba front-endu (analyzátoru)

Během fáze analýzy kompilátoru dochází k chybovému ukončení front-endu. Kompilátor obvykle generuje závažnou chybu C1001 a odkazuje na soubor zdrojového kódu a číslo řádku, ke kterému došlo k chybě. Často se zmíní soubor s názvem msc1.cpp, ale tento detail můžete ignorovat.

Pro tento druh chybového ukončení zadejte předzpracované opakování.

Tady je příklad výstupu kompilátoru pro tento druh chybového ukončení:

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

Chyba back-endu (generování kódu)

Během fáze generování kódu kompilátoru dochází k chybovému ukončení back-endu. Kompilátor obvykle generuje závažnou chybu C1001 a nemusí odkazovat na soubor zdrojového kódu a číslo řádku přidružené k problému. Často se zmíní kompilátor souboru\utc\src\p2\main.c, ale tento detail můžete ignorovat.

Pokud používáte generování kódu ltCG (Link-Time Code Generation), které je povolené pomocí argumentu příkazového řádku /GL pro cl.exe, poskytněte pro tento druh chybového ukončení opakování odkazu. Pokud ne, zadejte místo toho předzpracované opakování .

Tady je příklad výstupu kompilátoru pro chybové ukončení back-endu, ve kterém se LTCG nepoužívá. Pokud výstup kompilátoru vypadá takto, měli byste zadat předzpracované opakování.

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

Pokud řádek začínající chybou interního kompilátoru zmíní link.exe místo cl.exe, byla povolena funkce LTCG. V tomto případě zadejte reproproci odkazu. Pokud není jasné, jestli byla funkce LTCG povolena z chybové zprávy kompilátoru, prozkoumejte argumenty příkazového řádku. Zkopírovali jste je z protokolu sestavení v předchozím kroku pro argument příkazového řádku /GL .

Chyba linkeru

Po spuštění kompilátoru dojde k chybovému ukončení linkeru během fáze propojení. Linker obvykle generuje chybu linkerů LNK1000.

Poznámka:

Pokud výstup zmíní C1001 nebo zahrnuje generování kódu v čase propojení, místo toho se podívejte na chybové ukončení back-endu (generování kódu).

Pro tento druh chybového ukončení zadejte reproproci odkazu.

Tady je příklad výstupu kompilátoru pro tento druh chybového ukončení:

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

Pokud je povolené přírůstkové propojení a k chybovému ukončení došlo až po úspěšném počátečním propojení, to znamená až po prvním úplném propojení, na kterém je založeno pozdější přírůstkové propojení, uveďte také kopii souborů objektu (.obj) a knihovny (.lib), které odpovídají zdrojovým souborům upraveným po dokončení počátečního propojení.

Chybné generování kódu

Generování chybného kódu je vzácné. Nastane, když kompilátor omylem vygeneruje nesprávný kód, který způsobí chybové ukončení aplikace za běhu. Místo toho by měl vygenerovat správný kód nebo zjistit problém v době kompilace. Pokud se domníváte, že problém, který jste zjistili, vede k chybnému generování kódu, zacházejte se sestavou stejně jako s chybovým ukončením back-endu (generování kódu).

Pokud k cl.exe používáte argument příkazového řádku /GL, uveďte pro tento druh chybového ukončení opakování odkazu. Pokud ne, zadejte předzpracované opakování.

Jak vygenerovat opakování

Abychom nám pomohli zjistit zdroj problému, je důležitá dobrá reproce . Než provedete některý z níže uvedených kroků pro konkrétní druhy opakování, zkuste co nejvíce zkondenzovat kód, který ukazuje problém. Pokuste se eliminovat nebo minimalizovat závislosti, požadované hlavičky a knihovny. Pokud je to možné, omezte možnosti kompilátoru a definice preprocesoru.

Níže jsou uvedeny pokyny pro generování různých druhů opakování, které se použijí k hlášení různých druhů problémů.

Předzpracované opakování

Předzpracovaná reproproce je jeden zdrojový soubor, který ukazuje problém. Generuje se z výstupu preprocesoru jazyka C. Pokud ho chcete vytvořit, použijte možnost kompilátoru /P v původním zdrojovém souboru pro reprodukci. Tato možnost vyřadí zahrnuté hlavičky, aby se odebraly závislosti na jiných zdrojových a hlavičkových souborech. Tato možnost také řeší makra, #ifdef podmíněné příkazy a další příkazy preprocesoru, které by mohly záviset na místním prostředí.

Poznámka:

Předzpracované opakování nejsou tak užitečné pro problémy, které můžou být výsledkem chyb v naší standardní implementaci knihovny, protože často chceme nahradit nejnovější probíhající implementaci, abychom zjistili, jestli jsme problém již opravili. V takovém případě nezpracovávejte předzpracování a pokud nemůžete problém omezit na jeden zdrojový soubor, zabalte kód do souboru .zip nebo podobného souboru nebo zvažte použití reproprodukování projektu IDE. Další informace naleznete v tématu Další repros.

Předběžné zpracování souboru zdrojového kódu

  1. Zachyťte argumenty příkazového řádku použité k vytvoření opakování, jak je popsáno v části Hlášení obsahu příkazového řádku.

  2. Otevřete příkazový řádek pro vývojáře, který odpovídá architektuře konfigurace a verze sady Visual Studio použité k sestavení projektu.

  3. Přejděte do adresáře, který obsahuje váš projekt pro reprodukci.

  4. V okně konzoly příkazového řádku pro vývojáře zadejte filename.cpp argumenty cl /P. Pro argumenty použijte seznam argumentů, které jste zachytili výše. filename.cpp je název zdrojového souboru pro reprodukci. Tento příkaz replikuje příkazový řádek, který jste použili pro reprodukci, ale zastaví kompilaci po předání preprocesoru. Potom zapíše předzpracovaný zdrojový kód na název souboru.i.

Pokud předzpracujete soubor zdrojového kódu C++/CX nebo používáte funkci modulů C++, je potřeba provést několik dalších kroků. Další informace najdete v následujících částech.

Po vygenerování předzpracovaného souboru je vhodné se ujistit, že se problém při kompilaci předzpracovaného souboru stále znovu přeloží.

Pokud chcete potvrdit, že předzpracovaný soubor stále znovu zobrazí chybu

  1. V okně konzoly příkazového řádku pro vývojáře zadejte argumenty příkazového řádku /TP filename.i, abyste cl.exe, aby zkompiloval předzpracovaný soubor jako zdrojový soubor jazyka C++. Argumenty jsou stejné argumenty zachycené výše, ale s odebranými argumenty /D a /I . Je to proto, že už jsou součástí předzpracovaného souboru. filename.i je název vašeho předzpracovaného souboru.

  2. Ověřte, že je problém reprodukován.

Nakonec k sestavě připojte předzpracovaný název souboru repro.i.

Předzpracované opakování kódu C++/CX WinRT/UPW

Pokud k sestavení spustitelného souboru používáte C++/CX, je potřeba provést několik dalších kroků k vytvoření a ověření předzpracovaného opakování.

Předběžné zpracování zdrojového kódu C++/CX

  1. Vytvořte předzpracovaný zdrojový soubor, jak je popsáno v části Předběžné zpracování souboru zdrojového kódu.

  2. Vyhledejte vygenerovaný soubor filename.i direktivy #using .

  3. Vytvořte seznam všech odkazovaných souborů. Vynechejte všechny soubory Windows*.winmd, soubory platform.winmd a mscorlib.dll.

Příprava na ověření, že předzpracovaný soubor stále reprodukuje problém,

  1. Vytvořte nový adresář pro předzpracovaný soubor a zkopírujte ho do nového adresáře.

  2. Zkopírujte soubory .winmd ze seznamu #using do nového adresáře.

  3. V novém adresáři vytvořte prázdný soubor vccorlib.h.

  4. Upravte předzpracovaný soubor tak, aby se odebraly všechny direktivy #using pro mscorlib.dll.

  5. Upravte předzpracovaný soubor a změňte všechny absolutní cesty jenom na úplné názvy souborů pro zkopírované soubory .winmd.

Ověřte, že předzpracovaný soubor stále reprodukuje problém, jak je uvedeno výše.

Předzpracované opakování modulů C++

Pokud používáte funkci Moduly kompilátoru C++, je potřeba provést několik různých kroků k vytvoření a ověření předzpracovaného opakování.

Předběžné zpracování souboru zdrojového kódu, který používá modul

  1. Zachyťte argumenty příkazového řádku použité k vytvoření opakování, jak je popsáno v části Hlášení obsahu příkazového řádku.

  2. Otevřete příkazový řádek pro vývojáře, který odpovídá architektuře konfigurace a verze sady Visual Studio použité k sestavení projektu.

  3. Přejděte do adresáře, který obsahuje váš projekt pro reprodukci.

  4. V okně konzoly příkazového řádku pro vývojáře zadejte filename.cpp argumenty cl /P. Argumenty jsou argumenty zachycené výše a filename.cpp je název zdrojového souboru, který modul využívá.

  5. Přejděte do adresáře, který obsahuje projekt pro reprodukci, který vytvořil rozhraní modulu (výstup .ifc).

  6. Zachyťte argumenty příkazového řádku použité k sestavení rozhraní modulu.

  7. V okně konzoly příkazového řádku vývojáře zadejte příkaz cl /P arguments modulename.ixx. Argumenty jsou argumenty zachycené výše a modulename.ixx je název souboru, který vytvoří rozhraní modulu.

Po vygenerování předzpracovaných souborů je vhodné se ujistit, že se problém při použití předzpracovaného souboru stále přeroste.

Pokud chcete potvrdit, že předzpracovaný soubor stále znovu zobrazí chybu

  1. V okně konzoly pro vývojáře přejděte zpět do adresáře, který obsahuje váš projekt pro reprodukci.

  2. Zadejte argumenty cl příkazu /TP filename.i tak, jak je uvedeno výše, a zkompilujte předzpracovaný soubor, jako by se jednalo o zdrojový soubor C++.

  3. Ověřte, že problém stále reprodukuje předzpracovaný soubor.

Nakonec připojte předzpracované soubory repropro (název_souboru.i a název_modulu.i) spolu s výstupem .ifc do sestavy.

Reprodukování odkazu je obsah adresáře vygenerovaný linkerem určený buď proměnnou prostředí link_repro, nebo jako argument pro možnost linkeru /LINKREPRO. Obsahuje artefakty sestavení, které souhrnně ukazují problém, ke kterému dochází v době propojení. Mezi příklady patří selhání back-endu zahrnující generování kódu v čase link-time (LTCG) nebo chybové ukončení linkeru. Tyto artefakty sestavení jsou ty, které jsou potřeba jako vstup linkeru, aby bylo možné problém reprodukovat. Pomocí této proměnné prostředí lze snadno vytvořit reprodukování odkazu. Umožňuje integrované generování reprogenerování linkeru.

  1. Zachyťte argumenty příkazového řádku použité k vytvoření opakování, jak je popsáno v části Hlášení obsahu příkazového řádku.

  2. Otevřete příkazový řádek pro vývojáře, který odpovídá architektuře konfigurace a verze sady Visual Studio použité k sestavení projektu.

  3. V okně konzoly příkazového řádku pro vývojáře přejděte do adresáře, který obsahuje váš projekt pro reprodukci.

  4. Zadáním příkazu mkdir linkrepro vytvořte adresář s názvem linkrepro pro repro . K zachycení dalšího opakování odkazu můžete použít jiný název.

  5. Zadáním sady příkazů link_repro=linkrepro nastavte proměnnou prostředí link_repro na adresář, který jste vytvořili. Pokud je sestavení spuštěné z jiného adresáře, stejně jako u složitějších projektů, nastavte místo toho link_repro na úplnou cestu k adresáři pro reprodukci odkazu.

  6. Pokud chcete vytvořit projekt pro reprodukci v sadě Visual Studio, zadejte v okně konzoly příkazového řádku vývojáře příkaz devenv. Zajišťuje, aby hodnota proměnné prostředí link_repro byla viditelná pro Visual Studio. K sestavení projektu na příkazovém řádku použijte argumenty příkazového řádku, které jsou zachyceny výše, a duplikujte sestavení pro reprodukci.

  7. Sestavte projekt pro reprodukci a ověřte, že došlo k očekávanému problému.

  8. Zavřete Visual Studio, pokud jste ho použili k sestavení.

  9. V okně konzoly příkazového řádku vývojáře zadejte sadu příkazů link_repro= a vymažte link_repro proměnnou prostředí.

Nakonec zabalte repropro komprimací celého adresáře linkrepro do souboru .zip nebo podobného souboru a připojte ho k sestavě.

Možnost linkeru /LINKREPRO má stejný účinek jako proměnná prostředí link_repro . Pomocí možnosti /LINKREPROTARGET můžete zadat název, který se má filtrovat pro vygenerovaný reproprodukovaný odkaz. Chcete-li použít /LINKREPROTARGET, musíte také zadat možnost /OUT linker.

  1. Vytvořte adresář pro uložení reproproce odkazu. Budeme odkazovat na úplnou cestu k adresáři, kterou vytvoříte jako cestu k adresáři. Pokud obsahuje mezery, použijte kolem cesty dvojité uvozovky.

  2. Do příkazového řádku linkeru přidejte příkaz /LINKREPRO:directory-path . V sadě Visual Studio otevřete dialogové okno Stránky vlastností projektu. Vyberte stránku vlastností linkeru>Vlastností konfigurace>příkazového řádku. Potom do pole Další možnosti zadejte možnost /LINKREPRO:directory-path. Kliknutím na OK uložte provedené změny.

  3. Sestavte projekt pro reprodukci a ověřte, že došlo k očekávanému problému.

Nakonec zabalte reprodukci tím, že zkomprimujte celý adresář odkazu na cestu k adresáři do .zip souboru nebo podobného souboru a připojte ho k sestavě.

Jiné opakování

Pokud nemůžete problém omezit na jeden zdrojový soubor nebo předzpracované opakování a problém nevyžaduje reproprodukování odkazu, můžeme prozkoumat projekt integrovaného vývojového prostředí (IDE). Všechny pokyny k vytvoření dobrého opakování stále platí: Kód by měl být minimální a samostatný. Problém by měl nastat v našich nejnovějších nástrojích, a pokud je to relevantní, neměly by být vidět v jiných kompilátorech.

Vytvořte si repropro jako minimální projekt IDE a pak ho zabalte komprimací celé struktury adresáře do souboru .zip nebo podobného souboru a připojte ho k sestavě.

Způsoby odeslání sestavy

Máte několik dobrýchzpůsobůch Můžete použít integrovaný nástroj pro hlášení problémů sady Visual Studio nebo stránku komunity vývojářů sady Visual Studio. V dolní části této stránky je také tlačítko Pro odeslání názoru na produkt. Volba závisí na tom, jestli chcete pomocí integrovaných nástrojů v integrovaném vývojovém prostředí zachytit snímky obrazovky a uspořádat sestavu. Pokud nechcete, můžete přímo použít web komunity vývojářů.

Poznámka:

Microsoft respektuje vaše soukromí bez ohledu na to, jak sestavu odesíláte. Společnost Microsoft se zavazuje dodržovat všechny zákony a předpisy týkající se ochrany osobních údajů. Informace o tom, jak zacházíme s daty, která nám pošlete, najdete v prohlášení společnosti Microsoft o zásadách ochrany osobních údajů.

Použití nástroje Nahlásit problém

Nástroj Nahlásit problém v sadě Visual Studio je způsob, jak uživatelé sady Visual Studio hlásit problémy několika kliknutími. Zobrazí se jednoduchý formulář pro odeslání podrobných informací o zjištěném problému. Sestavu pak můžete odeslat bez opuštění integrovaného vývojového prostředí (IDE).

Hlášení problému pomocí nástroje Nahlásit problém je snadné a pohodlné z integrovaného vývojového prostředí (IDE). Přístup k němu můžete získat z záhlaví tak, že vyberete ikonu Odeslat názor vedle vyhledávacího pole Snadné spuštění . Nebo ho najdete na řádku nabídek v nápovědě>>odeslat zprávu o problému.

Když se rozhodnete nahlásit problém, nejprve vyhledejte podobné problémy v komunitě vývojářů. V případě, že byl váš problém nahlášen dříve, zvedněte sestavu a přidejte komentáře s podrobnějšími informacemi. Pokud se vám podobný problém nezobrazuje, zvolte tlačítko Nahlásit nový problém v dolní části dialogového okna Váš názor v sadě Visual Studio a postupujte podle pokynů k nahlášení problému.

Použití stránek komunity vývojářů sady Visual Studio

Stránky komunity vývojářů sady Visual Studio jsou dalším pohodlným způsobem, jak hlásit problémy a najít řešení pro Visual Studio a kompilátor, nástroje a knihovny jazyka C++. Existují konkrétní stránky komunity vývojářů pro Visual Studio, Visual Studio pro Mac, .NET, C++, Azure DevOps a Azure DevOps Server.

Pod kartami komunity v horní části každé stránky je vyhledávací pole. Můžete ho použít k vyhledání příspěvků, které hlásí problémy podobné vašemu. Možná najdete řešení nebo jiné užitečné informace související s vaším problémem už jsou k dispozici. Pokud někdo předtím nahlásil stejný problém, vytvořte místo vytvoření nové zprávy zprávu o problému a vytvořte na tuto sestavu vyvolání a komentář. Pokud chcete komentovat, hlasovat nebo nahlásit nový problém, můžete být požádáni, abyste se přihlásili ke svému účtu sady Visual Studio. Při prvním přihlášení musíte souhlasit s tím, že aplikaci komunity vývojářů udělíte přístup k vašemu profilu.

V případě problémů s kompilátorem, linkerem a dalšími nástroji a knihovnami jazyka C++ nejprve vyhledejte stránku komunity vývojářů jazyka C++. Pokud hledáte problém a ještě není hlášený, zvolte tlačítko Nahlásit problém vedle vyhledávacího pole. Můžete zahrnout kód pro reprodukci a příkazový řádek, snímky obrazovky, odkazy na související diskuze a všechny další informace, které si myslíte, že jsou relevantní a užitečné.

Tip

Informace v počáteční zprávě komunity vývojářů budou vždy veřejné. Pokud se jedná o problém, přečtěte si další část o sestavách a ochraně osobních údajů.

Tip

V případě jiných typů problémů, které se můžou v sadě Visual Studio vyskytovat nesouvisející se sadou nástrojů C++ (například problémy s uživatelským rozhraním, nefunkční funkce integrovaného vývojového prostředí nebo obecné chybové ukončení), použijte nástroj Nahlásit problém v integrovaném vývojovém prostředí (IDE). Je to nejlepší volba, protože její možnosti snímku obrazovky a její schopnost zaznamenávat akce uživatelského rozhraní, které vedou k zjištěnému problému. Tyto druhy chyb se také dají vyhledat na webu komunity vývojářů sady Visual Studio. Další informace naleznete v tématu Jak nahlásit problém se sadou Visual Studio.

Sestavy a ochrana osobních údajů

Všechny informace v sestavách a všech komentářích a odpovědích jsou ve výchozím nastavení veřejně viditelné. Za normálních okolností je to výhoda, protože umožňuje celé komunitě zobrazit problémy, řešení a alternativní řešení, která našli jiní uživatelé. Pokud se ale obáváte, že se vaše data nebo identita zpřístupní z důvodů ochrany osobních údajů nebo duševního vlastnictví, máte k dispozici možnosti.

Pokud vás zajímá odhalení vaší identity, vytvořte si nový účet Microsoft, který o vás nezveřejňuje žádné podrobnosti. Pomocí tohoto účtu můžete vytvořit sestavu.

Nevkládejte nic, co chcete zachovat jako soukromý název nebo obsah úvodní sestavy, což je veřejné. Místo toho řekněme, že podrobnosti pošlete soukromě v samostatném komentáři. Abyste měli jistotu, že je vaše sestava směrovaná na správné lidi, zahrňte do seznamu témat zprávy o problému cppcompiler . Po vytvoření sestavy problémů je teď možné určit, kdo uvidí vaše odpovědi a přílohy.

Vytvoření zprávy o problému pro soukromé informace

  1. V sestavě, kterou jste vytvořili, zvolte Přidat komentář a vytvořte svůj soukromý popis problému.

  2. V editoru odpovědí použijte ovládací prvek rozevíracího seznamu pod tlačítky Odeslat a Zrušit a určete cílovou skupinu pro vaši odpověď. Tyto soukromé odpovědi a všechny obrázky, odkazy nebo kód, které do nich zahrnete, uvidí jenom vámi zadané osoby. Zvolte Zobrazitelné podle moderátorů a původního plakátu , abyste omezili viditelnost zaměstnanců Microsoftu a sami sebe.

  3. Přidejte popis a všechny další informace, obrázky a přílohy souborů potřebné pro vaše opakování. Pokud chcete tyto informace odeslat soukromě, zvolte tlačítko Odeslat.

    U připojených souborů platí limit 2 GB a maximálně 10 souborů. U všech větších nahrávek si v privátním komentáři vyžádáte adresu URL pro nahrání.

Všechny odpovědi pod tímto komentářem mají stejnou omezenou viditelnost, jakou jste zadali. Platí to i v případě, že ovládací prvek rozevíracího seznamu u odpovědí nezobrazuje správně stav omezené viditelnosti.

Pokud chcete zachovat ochranu osobních údajů a zachovat citlivé informace mimo veřejné zobrazení, buďte opatrní. Zachovejte veškerou interakci s Microsoftem s odpověďmi v rámci omezeného komentáře. Odpovědi na jiné komentáře můžou způsobit náhodné zveřejnění citlivých informací.

Nahlášení problému s dokumentací jazyka C++

Problémy GitHubu používáme ke sledování problémů hlášených v naší dokumentaci. Problémy GitHubu teď můžete vytvářet přímo ze stránky obsahu, která umožňuje pracovat s autory a produktovými týmy bohatším způsobem. Pokud se zobrazí problém s dokumentem, chybným vzorovým kódem, matoucím vysvětlením, kritickým vynecháním nebo dokonce jen překlepem, můžete nám snadno dát vědět. Posuňte se do dolní části stránky a výběrem možnosti Přihlásit se zpětnou vazbu k dokumentaci. Pokud ho ještě nemáte, musíte si vytvořit účet GitHubu. Když máte účet GitHubu, uvidíte všechny problémy s dokumentací a jejich stav. Oznámení se zobrazí také v případě, že dojde ke změnám nahlášeného problému. Další informace najdete v blogové položce systému Feedback System.

Problém s dokumentací vytvoříte na GitHubu, když použijete tlačítko pro zpětnou vazbu k dokumentaci. Problém se automaticky vyplní informacemi o stránce, na které jste problém vytvořili. To je způsob, jak víme, kde se problém nachází, takže tyto informace neupravujte. Stačí přidat podrobnosti o tom, co je špatně, a pokud chcete, navrhovaná oprava. Naše dokumenty c++ jsou opensourcové, takže pokud chcete odeslat opravu sami, můžete. Další informace o tom, jak můžete přispívat do naší dokumentace, najdete v naší příručce pro přispívání na GitHubu.