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

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

Nahláš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 vytváříte program. A měla by obsahovat reprodukování, kompletní testovací případ, který můžeme použít k reprodukování problému na našich vlastních počítačích. Tyto informace nám umožňují rychle ověřit, že problém existuje v našem kódu a 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čtete, co dělá dobrou sestavu. Popisujeme, jak vygenerovat reprodukci typu problému, který jste našli, a jak odeslat sestavu produktovému týmu. Vaše sestavy jsou důležité pro nás i pro další vývojáře, jako jste vy. 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 nalezený problém bez úplných informací. Čím lepší je vaše zpráva, tím efektivněji můžeme problém znovu vytvořit a diagnostikovat.

Sestava by měla obsahovat minimálně:

  • Informace o plné 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ý a samostatný příklad zdrojového kódu, který demonstruje problém.

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

Verze sady nástrojů

Potřebujeme informace o plné verzi a cílovou architekturu sady nástrojů, která problém způsobuje. To proto, abychom mohli otestovat vaše reprodukování se stejnou sadou nástrojů na našich počítačích. Pokud můžeme problém reprodukovat, tyto informace nám také poskytují výchozí bod k prozkoumání, které další 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á verzi a konfigurační architektuře sady Visual Studio použité k sestavení projektu. Pokud například vytváříte pomocí sady Visual Studio 2017 na platformě x64 pro cíle x64, zvolte příkazový řádek nativních nástrojů x64 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 proto, abychom ho mohli sestavit úplně stejným způsobem na našich počítačích. Je to důležité, protože problém, který jste našli, může existovat pouze při sestavování pomocí určitého argumentu nebo kombinace argumentů.

Nejlepší místo k vyhledání těchto informací je v protokolu sestavení hned po zjištění problému. Zajišťuje, aby příkazový řádek obsahoval přesně stejné argumenty, které by mohly přispět k problému.

Hlášení obsahu příkazového řádku

  1. Vyhledejte soubor CL.command.1.tlog a otevřete ho. Ve výchozím nastavení je tento soubor umístěn ve složce Dokumenty ve složce \Visual Studio version\Projects\SolutionName\Název_\projektu_konfigurace\Název_projektu.tlog\CL.command.1.tlog nebo ve složce User 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 najdete názvy souborů zdrojového kódu následované argumenty příkazového řádku použitými k jejich kompilaci, každý na samostatných řádcích.

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

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

Popis problému

Potřebujeme podrobný popis problému, který jste našli. To proto, abychom mohli ověřit, že vidíme stejný účinek na naše počítače. Někdy je také užitečné vědět, čeho jste se snažili dosáhnout a co jste očekávali.

Dobrý popis obsahuje 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. Uveďte všechny výstupy kompilátoru, ne jenom poslední chybovou zprávu. Potřebujeme zobrazit vše, co vedlo k problému, který jste nahlásili. Pokud můžete problém duplikovat pomocí kompilátoru příkazového řádku, je preferován výstup kompilátoru. Integrované vývojové prostředí (IDE) a další systémy sestavení můžou filtrovat zobrazené chybové zprávy nebo zachytávat pouze první řádek chybové zprávy.

Pokud je problém 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 dojde k chybovému ukončení nebo zablokování programu, zmiňte to také.

Přidejte všechny další podrobnosti, které by nám mohly pomoct diagnostikovat nalezený problém, například všechny zjištěné postupy. Snažte se neopakovat informace, které najdete jinde v sestavě.

Reprodukování

Reprodukování je kompletní, samostatný příklad zdrojového kódu. Reprodukovatelně znázorňuje 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 sám o sobě stačit k vytvoření základního spustitelného souboru, který se zkompiluje a spouští. Nebo by se to zkompilovalo a spustilo, pokud ne pro problém, který jste zjistili. Reprodukování není fragment kódu. Měl by mít úplné funkce a třídy a obsahovat všechny potřebné #include direktivy, a to i pro standardní hlavičky.

Co dělá dobrou reprodukci

Dobrá reprodukce je:

  • Minimální. Reros by měl být co nejmenší, ale přesto by měl ukázat přesně ten problém, který jste našli. Repros nemusí být složité ani realistické. Potřebují pouze zobrazit kód, který odpovídá standardu nebo zdokumentované implementaci kompilátoru. V případě chybějící diagnostiky by se v reprodukování měl zobrazit kód, který není v souladu. Nejlepší jsou jednoduchá reproce k bodu, která obsahují pouze dostatek kódu k předvedení problému. 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 zahrnovat čítače kódu, který funguje.

  • Samostatná. 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. Ideální je, pokud je možné příklad zkondenzovat do jednoho souboru zdrojového kódu bez odkazu na hlavičky uživatele. Snížení množství kódu, které musíme považovat za možného přispěvatele k problému, je pro nás nesmírně užitečné.

  • Proti nejnovější verzi kompilátoru. Repros by měl 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 další hlavní verze. Problémy, které můžete najít ve starších verzích sady nástrojů, byly často opraveny v novějších verzích. Opravy jsou zpět do starších verzí pouze za výjimečných okolností.

  • V případě potřeby se kontroluje u jiných kompilátorů. Funkce Repros, které zahrnují přenosný kód C++, by měly ověřit chování vůči jiným kompilátorům, pokud je to možné. Standard jazyka C++ nakonec určuje správnost programu a žádný kompilátor není dokonalý. Pokud však Clang a GCC přijmou váš kód bez diagnostiky a MSVC ne, pravděpodobně jste našli chybu v našem kompilátoru. (Mezi další možnosti patří rozdíly v chování systémů Unix a Windows nebo různé úrovně implementace standardů C++ atd.) Pokud 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 problém diagnostikovat sami.

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

    Poznámka

    Weby online kompilátoru nejsou přidružené 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í tohoto článku 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 reprodukování byste měli zahrnout do sestavy. Bez příslušné reprodukce nemáme co prověřit. Tady je několik typů problémů, se kterými se můžete setkat. Obsahujeme pokyny, jak vygenerovat druh opakování, který byste měli použít k nahlášení jednotlivých druhů problémů.

Chyba front-endu (analyzátoru)

K chybám front-endu dochází během fáze parsování kompilátoru. Kompilátor obvykle generuje závažnou chybu C1001 a odkazuje na soubor zdrojového kódu a číslo řádku, na kterém k chybě došlo. Často uvádí soubor s názvem msc1.cpp, ale tento detail můžete ignorovat.

V případě tohoto typu chybového ukončení zadejte předzpracovanou reprodukci.

Tady je příklad výstupu kompilátoru pro tento typ 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)

K chybám back-endu dochází během fáze generování kódu kompilátoru. 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 uvádí kompilátor souboru\utc\src\p2\main.c, ale tento detail můžete ignorovat.

V případě tohoto typu chybového ukončení zadejte reprodukování odkazu , pokud používáte link-time code generation (LTCG), které je povolené argumentem příkazového řádku /GL pro cl.exe. Pokud ne, zadejte místo toho předzpracovanou reprodukci .

Tady je příklad výstupu kompilátoru pro selhání back-endu, ve kterém se nepoužívá LTCG. Pokud výstup kompilátoru vypadá takto, měli byste zadat předzpracovanou reprodukci.

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, který začíná vnitřní chybou kompilátoru , uvádí link.exe místo cl.exe, ltCG byl povolen. V tomto případě zadejte reprodukování odkazu . Pokud není jasné, jestli byla z chybové zprávy kompilátoru povolená funkce LTCG, zkontrolujte 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

K chybovému ukončení linkeru dochází během fáze propojení po spuštění kompilátoru. Linker obvykle vygeneruje chybu linkerů LNK1000.

Poznámka

Pokud výstup uvádí C1001 nebo zahrnuje generování kódu v čase propojení, projděte si místo toho chybu back-endu (generování kódu ).

V případě tohoto typu chybového ukončení zadejte reprodukování odkazu.

Tady je příklad výstupu kompilátoru pro tento typ 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 chybě došlo až po úspěšném počátečním propojení, tj. teprve po prvním úplném propojení, na kterém je založeno pozdější přírůstkové propojení, zadejte 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

Chybné generování kódu je vzácné. K tomu dochází, 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 při kompilaci. 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 chybou back-endu (generování kódu).

V případě tohoto typu chybového ukončení zadejte reprodukování odkazu , pokud k cl.exe používáte argument příkazového řádku /GL . Pokud ne, zadejte předzpracovanou reprodukci .

Jak vygenerovat reprodukci

K tomu, abychom mohli vystopovat zdroj problému, je velmi důležitá správná reprodukace . 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 najdete pokyny k vygenerování různých druhů opakování, které použijete k hlášení různých druhů problémů.

Předzpracované reproce

Předzpracovaná reprodukce je jeden zdrojový soubor, který demonstruje problém. Vygeneruje 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 vložených hlaviček odebere závislosti na dalších zdrojových souborech a souborech hlaviček. Možnost také přeloží makra, #ifdef podmíněné příkazy a další příkazy preprocesoru, které by mohly záviset na vašem místním prostředí.

Poznámka

Předzpracované reproce nejsou tak užitečné pro problémy, které můžou být výsledkem chyb v naší standardní implementaci knihovny, protože často budeme chtít nahradit naši nejnovější probíhající implementaci, abychom zjistili, jestli už jsme problém vyřešili. V tomto případě nezpracovávejte předprodukci, 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í reprodukování projektu IDE. Další informace najdete v tématu Další reproce.

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

  1. Zachyťte argumenty příkazového řádku použité k vytvoření reprodukování, jak je popsáno v tématu Sestava obsahu příkazového řádku.

  2. Otevřete příkazový řádek pro vývojáře , který odpovídá verzi a konfigurační architektuře 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 příkaz cl /Pargumentsfilename.cpp. 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. Pak 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 Moduly jazyka 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é zajistit, aby se problém při kompilaci předzpracovaného souboru stále vygeneroval.

Chcete-li ověřit, že předzpracovaný soubor stále zobrazuje chybu

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

  2. Ověřte, že se problém reprodukoval.

Nakonec k sestavě připojte předzpracovaný reprodukovaný název_souboru.i.

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

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

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

  1. Vytvořte předzpracovaný zdrojový soubor, jak je popsáno v tématu To preprocess a source code file.

  2. Vyhledejte vygenerovaný soubor filename.idirektivy #using .

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

Chcete-li se připravit 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. Úpravou předzpracovaného souboru odeberte všechny direktivy #using pro mscorlib.dll.

  5. Upravte předzpracovaný soubor tak, aby se všechny absolutní cesty změnily pouze na holé 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é moduly C++ repros

Pokud používáte funkci Modules kompilátoru jazyka C++, k vytvoření a ověření předzpracované reprodukce se vyžaduje několik různých kroků.

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í reprodukování, jak je popsáno v tématu Sestava obsahu příkazového řádku.

  2. Otevřete příkazový řádek pro vývojáře , který odpovídá verzi a konfigurační architektuře 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 příkaz cl /Pargumentsfilename.cpp. Argumenty jsou výše uvedené argumenty a název_souboru.cpp je název zdrojového souboru, který využívá modul.

  5. Přejděte na adresář, 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 pro vývojáře zadejte příkaz cl /Pargumentsmodulename.ixx. Argumenty jsou výše uvedené argumenty a modulename.ixx je název souboru, který vytváří rozhraní modulu.

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

Chcete-li ověřit, že předzpracovaný soubor stále zobrazuje chybu

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

  2. Zadejte příkaz clarguments/TPfilename.i, jak je uvedeno výše, a zkompilujte předzpracovaný soubor, jako by to byl zdrojový soubor C++.

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

Nakonec k sestavě připojte předzpracované soubory reprodukování (filename.i a modulename.i) spolu s výstupem .ifc.

Reprodukování odkazu je obsah vygenerovaný linkerem adresáře, který je určený buď proměnnou prostředí link_repro, nebo jako argument pro možnost linkeru /LINKREPRO. Obsahuje artefakty sestavení, které souhrnně demonstrují 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 propojení (LTCG) nebo selhání linkeru. Tyto artefakty sestavení jsou ty, které jsou potřeba jako vstup linkeru, aby bylo možné problém reprodukovat. Reprodukování odkazu lze snadno vytvořit pomocí této proměnné prostředí. Umožňuje integrované generování reprodukování linkeru.

  1. Zachyťte argumenty příkazového řádku použité k vytvoření reprodukování, jak je popsáno v tématu Sestava obsahu příkazového řádku.

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

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

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

  5. Zadáním příkazu set link_repro=linkrepro nastavte proměnnou prostředí link_repro na adresář, který jste vytvořili. Pokud se sestavení spouští z jiného adresáře, jak je to často 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 reprodukování v sadě Visual Studio, zadejte v okně konzoly příkazového řádku pro vývojáře příkaz devenv. Zajišťuje, aby byla v sadě Visual Studio viditelná hodnota proměnné prostředí link_repro . Pokud chcete vytvořit projekt na příkazovém řádku, pomocí výše uvedených argumentů příkazového řádku 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 pro vývojáře zadejte příkaz set link_repro= a vymažte link_repro proměnnou prostředí.

Nakonec zabalte repro komprimací celého adresáře linkrepro do souboru .zip nebo podobného 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 vygenerovanou reprodukci odkazu. Pokud chcete použít /LINKREPROTARGET, musíte také zadat možnost linkeru /OUT .

  1. Vytvořte adresář pro uložení reprodukování odkazu. Úplnou cestu k adresáři, kterou vytvoříte, budeme označovat jako cesta k adresáři. Pokud cesta 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í pro váš projekt. Vyberte stránku vlastnostílinkeru>Konfigurace –>příkazový řádek. Potom do pole Další možnosti zadejte možnost /LINKREPRO:directory-path. Kliknutím na OK uložte změny.

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

Nakonec zabalte reprodukaci tak, že zkomprimujte celý adresář odkazu na adresář do souboru .zip nebo podobného souboru a připojíte ho k sestavě.

Další opakování

Pokud nemůžete problém omezit na jeden zdrojový soubor nebo předzpracovanou reprodukci a tento problém nevyžaduje reprodukování odkazu, můžeme prozkoumat projekt IDE. Všechny pokyny, jak vytvořit dobrou reprodukci, stále platí: Kód by měl být minimální a samostatný. K problému by mělo dojít v našich nejnovějších nástrojích, a pokud je to relevantní, neměl by se vyskytovat v jiných kompilátorech.

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

Způsoby odeslání sestavy

Máte několik dobrých způsobů, jak nám zprávu dostat. Můžete použít integrovaný nástroj pro hlášení problémů sady Visual Studio nebo stránku Developer Community sady Visual Studio. V dolní části této stránky je také tlačítko Pro zpětnou vazbu k produktu . Volba závisí na tom, jestli chcete pomocí předdefinovaných nástrojů v integrovaném vývojovém prostředí (IDE) pořizovat snímky obrazovky a uspořádat sestavu. Pokud nechcete, můžete přímo použít web Developer Community.

Poznámka

Bez ohledu na to, jak sestavu odešlete, společnost Microsoft respektuje vaše soukromí. Společnost Microsoft se zavazuje dodržovat všechny zákony a předpisy o ochraně osobních údajů. Informace o tom, jak nakládá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 umožňuje uživatelům sady Visual Studio oznamovat 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, aniž byste museli opustit integrované vývojové prostředí .

Nahlášení problému pomocí nástroje Nahlásit problém je snadné a pohodlné z integrovaného vývojového prostředí (IDE). Dostanete se k němu z záhlaví výběrem ikony Odeslat názor vedle vyhledávacího pole Snadné spuštění . Nebo ho najdete na řádku nabídek v části Nápověda>Odeslat zpětnou vazbu>Nahlásit problém.

Když se rozhodnete nahlásit problém, nejprve vyhledejte podobné problémy v Developer Community. V případě, že byl váš problém nahlášen dříve, nahlaste sestavu a přidejte komentáře s dalšími specifiky. Pokud podobný problém nevidíte, zvolte tlačítko Nahlásit nový problém v dolní části dialogového okna Visual Studio Feedback a postupujte podle pokynů k nahlášení problému.

Použití stránek Developer Community sady Visual Studio

Stránky Developer Community sady Visual Studio představují další pohodlný způsob, 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í Developer Community stránky pro Visual Studio, Visual Studio pro Mac, .NET, C++, Azure DevOps a Azure DevOps Server.

Pod kartami komunity je v horní části každé stránky vyhledávací pole. Můžete ho použít k vyhledání příspěvků, které hlásí problémy podobné tomu 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 nahlásil stejný problém už dříve, pak hlasujte a okomentujte tuto sestavu a nevytvořte novou zprávu o problému. Pokud chcete komentovat, hlasovat nebo nahlásit nový problém, můžete být požádáni o přihlášení k účtu sady Visual Studio. Při prvním přihlášení budete muset souhlasit s tím, že aplikaci Developer Community 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 Developer Community jazyka C++. Pokud hledáte svůj problém a ještě nebyl nahláš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, o kterých si myslíte, že jsou relevantní a užitečné.

Tip

V případě jiných typů problémů, které můžete v sadě Visual Studio najít, které nesouvisejí se sadou nástrojů jazyka 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). To je nejlepší volba, protože má funkce snímků obrazovky a schopnost zaznamenávat akce uživatelského rozhraní, které vedou k problému, který jste našli. Tyto typy chyb lze také vyhledat na webu Developer Community sady Visual Studio. Další informace najdete 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šechny komentáře a odpovědi jsou ve výchozím nastavení veřejně viditelné. Obvykle 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 vaše data nebo identita budou z důvodu ochrany osobních údajů nebo duševního vlastnictví veřejné, máte k dispozici možnosti.

Pokud se obáváte, že odhalíte svoji identitu, vytvořte si nový účet Microsoft , který o vás nezveřejňuje žádné podrobnosti. Pomocí tohoto účtu vytvořte sestavu.

Do názvu nebo obsahu původní sestavy, která je veřejná, nevkládejte nic, co chcete zachovat jako soukromé. Místo toho řekněte, že budete podrobnosti odesílat soukromě v samostatném komentáři. Pokud chcete mít jistotu, že je vaše sestava směrovaná na správné lidi, zahrňte cppcompiler do seznamu témat vaší zprávy o problému. Po vytvoření sestavy problému je teď možné určit, kdo může zobrazit 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 privátní 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 uživatelé, které zadáte. Zvolte Zobrazitelné moderátory a původní plakát , abyste omezili viditelnost na zaměstnance Microsoftu i na sebe.

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

    Pro připojené soubory platí limit 2 GB a maximálně 10 souborů. V případě větších nahrávek si vyžádejte adresu URL pro odeslání v privátním komentáři.

Všechny odpovědi v tomto komentáři 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 své soukromí a zachovat citlivé informace mimo veřejné zobrazení, buďte opatrní. Zachovejte veškerou interakci s Microsoftem na odpovědi v rámci omezeného komentáře. Odpovědi na jiné komentáře můžou způsobit, že nechtěně prozradíte citlivé informace.

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

Problémy s GitHubem 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, což umožňuje mnohem bohatší interakci se spisovateli a produktovými týmy. Pokud se setkáte s problémem 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 to snadno dát vědět. Posuňte se do dolní části stránky a vyberte Přihlásit se, abyste získali zpětnou vazbu k dokumentaci. Pokud ho ještě nemáte, budete si muset vytvořit účet GitHub. Když máte účet GitHub, můžete zobrazit všechny problémy s dokumentací a jejich stav. Při provedení změn u nahlášeného problému se vám také zobrazí oznámení. Další informace najdete v našem příspěvku na blogu Systém zpětné vazby.

Problém s dokumentací vytvoříte na GitHubu, když použijete tlačítko pro zpětnou vazbu k dokumentaci. Problém se automaticky vyplní některými informacemi o stránce, na které jste problém vytvořili. Takto víme, kde se problém nachází, takže tyto informace neupravujte. Stačí připojit podrobnosti o tom, co je špatně, a pokud chcete, navrhovaná oprava. Naše dokumentace k C++ je open source, 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šem průvodci přispívání na GitHubu.