Postup nahlášení problému se sadami nástrojů nebo dokumentací jazyka Microsoft C++
Pokud zjistíte 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 se o tom také dozvědět.
Jak nahlásit problém se sadami nástrojů C++
Nejlepší způsob, jak nás o problému dozvědět, je poslat nám zprávu s popisem problému, který jste zjistili. Měl by mít všechny podrobnosti o tom, jak program sestavíte. A měla by obsahovat reprodukci– 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í ve vašem 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, z čeho je dobrá sestava. Popisujeme, jak vygenerovat reprodukování druhu problému, který jste našli, a jak odeslat sestavu produktového týmu. Vaše sestavy jsou důležité pro nás i pro ostatní vývojáře, jako jste vy. Děkujeme, že jste nám pomohli zlepšit Microsoft C++!
Postup přípravy 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 lepší je vaše sestava, tím efektivněji můžeme problém 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ého řádku použitý k sestavení kódu.
Podrobný popis problému, který jste zjistili.
Reprodukovaná: kompletní, zjednodušený, 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 úplné informace o verzi a cílovou architekturu sady nástrojů, která problém způsobuje. To je proto, abychom mohli otestovat vaše reprodukování se stejnou sadami nástrojů na našich počítačích. Pokud problém reprodukovat můžeme, tyto informace nám také posouží jako výchozí bod ke zkoumání, u kterých jiných verzí sady nástrojů dochází ke stejnému problému.
Hlášení úplné verze kompilátoru
Otevřete soubor Developer Command Prompt, který odpovídá Visual Studio a architektuře konfigurace použité k sestavení projektu. Pokud například sestavíte pomocí Visual Studio 2017 na x64 pro cíle x64, zvolte x64 Native Tools Command Prompt pro VS 2017. Další informace najdete v tématu Klávesové zkratky příkazového řádku pro vývojáře.
V okně konzoly příkazového řádku pro vývojáře zadejte příkaz cl /Bv.
Výstup by měl vypadat podobně jako tento:
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
Celý výstup zkopírujte a vložte do sestavy.
Příkazový řádek
Potřebujeme přesný příkazový řádek, cl.exe a všechny jeho argumenty, které se používají k sestavení kódu. To je proto, abychom ho mohli na našich počítačích vytvořit úplně stejným způsobem. Je to důležité, protože problém, který jste našli, 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í ihned po problému. Zajišťuje, že příkazový řádek obsahuje přesně stejné argumenty, které můžou k problému přispívat.
Hlášení obsahu příkazového řádku
Vyhledejte soubor CL.command.1.tlog a otevřete ho. Ve výchozím nastavení se tento soubor nachází ve složce Documents ve složce \Visual Studio\Projects\SolutionName ProjectName ConfigurationProjectName.tlog\CL.command.1.tlog nebo ve složce User ve složce \Source\Repos\SolutionNameProjectNameConfigurationProjectName.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, které se používají ke kompilaci, z nichž každý je na samostatných řádcích.
Vyhledejte řádek, který obsahuje název souboru zdrojového kódu, ve kterém k problému dochází. Řádek pod ní obsahuje odpovídající cl.exe argumenty příkazu.
Celý příkazový řádek zkopírujte a vložte do sestavy.
Popis problému
Potřebujeme podrobný popis problému, který jste našli. To je proto, abychom ověřili, že vidíme stejný účinek na našich počítačích. Někdy je také užitečné vědět, čeho se snažíte dosáhnout a co jste očekávali.
Dobrý popis obsahuje přesné chybové zprávy, které sada nástrojů poskytuje, nebo přesné chování modulu runtime, které vidíte. Tyto informace potřebujeme k ověření, že jsme problém správně reprodukoval. Zahrňte veškerý výstup kompilátoru, ne jenom poslední chybovou zprávu. Potřebujeme vidět vše, co vedlo k problému, který nahlásit. Pokud můžete problém duplikovat pomocí kompilátoru příkazového řádku, je upřednostňovaný výstup tohoto kompilátoru. Integrované vývojové prostředí (IDE) a jiné systémy sestavení mohou filtrovat chybové zprávy, které se zobrazí, nebo zachytit pouze první řádek chybové zprávy.
Pokud je problém v tom, že kompilátor přijímá neplatný kód a negeneruje diagnostiku, zahrnte ho do sestavy.
Pokud chcete nahlásit problém s chováním modulu runtime, zahrně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, například printf("This should be 5: %d\n", actual_result); . Pokud se váš program zhroutí nebo přestane reagovat, uveďte to také.
Přidejte další podrobnosti, které nám můžou pomoct diagnostikovat problém, který jste našli, například případné problémy, které jste zjistili. Zkuste informace nalezené jinde v sestavě neopakovat.
Reprodukovat
Reprodukovat je kompletní příklad samostatného zdrojového kódu. Reprodukovatelnost 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 sám o sobě dostačující k vytvoření základního spustitelného souboru, který se zkompiluje a spustí. Nebo by se to zkompiluje a spustí, pokud ne pro problém, který jste našli. Reprodukci není fragment kódu. Měl by mít úplné funkce a třídy a obsahovat všechny nezbytné #include, a to i pro standardní hlavičky.
Co je dobrá reprocesa
Dobrá reprocesa je:
Minimální. Reprodukovat by měly být co nejmenší, ale přesto přesně demonstrovat problém, který jste našli. Reprodukovat nemusí být složité ani realistické. Potřebují jenom zobrazit kód, který odpovídá standardu, nebo zdokumentované implementaci kompilátoru. V případě chybějící diagnostiky by vaše reprodukci měla zobrazit kód, který není v souladu. Jednoduché reprocesy od bodu do bodu, které obsahují pouze dostatečný kód k předvedení problému, jsou nejlepší. Pokud můžete kód eliminovat nebo zjednodušit a zůstat v souladu a nechat problém beze změny, proveďte to. Nemusíte zahrnovat příklady čítačů kódu, které fungují.
Samostatná aplikace. Reproproces by se měly vyhnout zbytečným závislostem. Pokud problém můžete reprodukovat bez knihoven třetích stran, proveďte to. Pokud můžete problém reprodukovat bez kódu knihovny kromě jednoduchých výstupních příkazů (například , a
puts("this shouldn't compile");std::cout << value;),printf("%d\n", value);proveďte to. Je ideální, pokud lze příklad zhuštět do jednoho souboru zdrojového kódu bez odkazu na záhlaví uživatele. Snížení množství kódu, který musíme považovat za možného přispěvatele problému, je pro nás nesmírně užitečné.Proti nejnovější verzi kompilátoru. Pokud je to možné, měly by se při reprodukci používat nejnovější aktualizace nejnovější verze sady nástrojů. 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ětně portovány do starších verzí pouze za výjimečných okolností.
Kontrola proti jiným kompilátorům, pokud je to relevantní. Pokud je to možné, měly by reprodukování, které zahrnují přenosný kód C++, ověřit chování jiných kompilátorů. Standard jazyka C++ nakonec určuje správnost programu a žádný kompilátor není dokonalý. Pokud ale Clang a GCC kód přijímají bez diagnostiky a MSVC ne, pravděpodobně jste v našem kompilátoru našli chybu. (Mezi další možnosti patří rozdíly v unixovém a Windows chování, nebo různé úrovně implementace standardů C++ atd.) Když všechny kompilátory odmítají váš kód, je pravděpodobné, že je váš kód nesprávný. Zobrazení různých chybových zpráv vám může pomáhat s diagnostikou problému sami.
Můžete najít seznamy online kompilátorů k otestování kódu proti v online kompilátorech c++ na webu ISO C++ nebo tento seznam nespravovaných kompilátorů online c++ na GitHub. Některé konkrétní příklady zahrnují Wandbox a Průzkumníka kompilátoru.
Poznámka
Online weby kompilátoru nejsou přidružené k Microsoftu. Mnoho online webů kompilátoru je spuštěno 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é, co můžete použít.
Problémy v kompilátoru, linkeru a v knihovnách se obvykle zobrazují v konkrétním ohledu. Typ problému, který vyhledáte, určí, jaký druh reprodukci byste měli zahrnout do sestavy. Bez vhodného reprodukci nemusíme nic prozkoumat. Tady je několik druhů problémů, které se mohou zobrazit. Obsahujeme pokyny, jak vygenerovat druh reprodukci, který byste měli použít k nahlášení každého druhu problému.
Došlo k chybě front-endu (analyzátor)
Během fáze analýzy kompilátoru dojde k selhání front-endu. Kompilátor obvykle generuje závažnou chybu C1001a odkazuje na soubor zdrojového kódu a číslo řádku, na kterém došlo k chybě. Často zmiňuje soubor s názvem msc1. cpp, ale tento detail můžete ignorovat.
Pro tento typ havárie poskytněte předzpracovaný reprodukci.
Tady je příklad výstupu kompilátoru pro tento druh havárie:
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
Selhání back-endu (generování kódu)
Během fáze generování kódu kompilátoru dojde k selhání back-endu. Kompilátor obvykle generuje závažnou chybu C1001a nemusí odkazovat na soubor zdrojového kódu a číslo řádku přidružené k problému. Často se zmiňuje o souboru compiler\utc\src\p2\main.c, ale můžete tento detail ignorovat.
Pro tento druh havárie zadejte odkaz reprodukci , pokud používáte generování kódu při propojování (LTCG), který je povolen argumentem příkazového řádku /GL pro cl.exe. Pokud ne, místo toho zadejte předzpracovaný reprodukci .
Tady je příklad výstupu kompilátoru pro selhání back-endu, ve kterém se LTCG nepoužívá. Pokud váš výstup kompilátoru vypadá jako následující, měli byste poskytnout předzpracovaný 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 se v řádku, který začíná s vnitřní chybou kompilátoru , zmiňuje link.exe místo cl.exe, je povolený LTCG. V tomto případě zadejte odkaz reprodukci . Pokud není jasné, zda byl LTCG povolen z chybové zprávy kompilátoru, Projděte si 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
Během fáze propojení dojde k selhání linkeru po spuštění kompilátoru. Obvykle linker generuje chybu linkerů LNK1000 nástrojů linkeru.
Poznámka
Pokud výstup zmiňuje C1001 nebo zahrnuje generování kódu při propojování, uveďte místo toho chybu back-endu (generování kódu) .
Pro tento druh havárie zadejte odkaz reprodukci.
Tady je příklad výstupu kompilátoru pro tento druh havárie:
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 povoleno přírůstkové propojování a dojde k selhání pouze po úspěšném počátečním propojení, tedy pouze po prvním úplném odkazu, na kterém je založen pozdější přírůstkový odkaz, také poskytne kopii objektů (. obj) a knihovny (. lib), které odpovídají zdrojovým souborům změněným po dokončení počátečního propojení.
Chybné generování kódu
Chybné generování kódu je zřídka. K tomu dochází, když kompilátor omylem generuje nesprávný kód, který způsobí, že dojde k chybě vaší aplikace za běhu. Místo toho by měl generovat správný kód nebo zjistit problém v době kompilace. Pokud se domníváte, že problém, který jste nalezli, způsobuje chybné generování kódu, považovat sestavu za chybu back-endu (generování kódu).
Pro tento typ havárie zadejte odkaz reprodukci , pokud k cl.exe používáte argument příkazového řádku /GL . Poskytněte předzpracovaný reprodukci , pokud ne.
Jak vygenerovat reprodukci
Abychom vám pomohli sledovat zdroj problému, je dobrý reprodukci důležitý. Předtím, než provedete některý z kroků uvedených níže pro konkrétní druhy respecialistů, se pokuste použít zhuštění kódu, který demonstruje problém co nejvíce. Zkuste eliminovat nebo minimalizovat závislosti, požadované hlavičky a knihovny. Omezte možnosti kompilátoru a použité Definice preprocesoru, pokud je to možné.
Níže jsou uvedeny pokyny pro generování různých druhů respecialistů, které použijete k hlášení různých druhů problémů.
Předzpracované předané profesionály
Předzpracovaný reprodukci je jeden zdrojový soubor, který demonstruje problém. Vygeneruje se z výstupu preprocesoru jazyka C. Chcete-li vytvořit jednu, použijte možnost kompilátoru /p v původním zdrojovém souboru reprodukci. Tato možnost zařadí zahrnuté hlavičky pro odebrání závislostí na dalších zdrojovém souboru a hlavičkových souborech. Tato možnost také řeší makra, #ifdef podmíněné hodnoty a další příkazy preprocesoru, které by mohly být závislé na vašem místním prostředí.
Poznámka
Předem zpracovávané postupy pro problémy, které by mohly být výsledkem chyb v naší implementaci standardní knihovny, nejsou tak užitečné, protože je často potřeba nahradit naše nejnovější, průběžnou implementací, abyste zjistili, jestli jsme problém vyřešili. V takovém případě neprovádějte předzpracování reprodukci a pokud nemůžete snížit problém do jediného zdrojového souboru, zabalit kód do .zip souboru nebo podobným způsobem nebo zvážit použití reprodukci projektu IDE. Další informace najdete v tématu Další specialisty.
Postup předběžného zpracování souboru zdrojového kódu
Zachyťte argumenty příkazového řádku, které se používají k sestavení reprodukci, jak je popsáno v tématu k nahlášení obsahu příkazového řádku.
otevřete Developer Command Prompt , který odpovídá verzi Visual Studio a architektuře konfigurace použité k sestavení projektu.
Přejděte do adresáře, který obsahuje váš projekt reprodukci.
V okně konzoly příkazového řádku pro vývojáře zadejte příkaz CL/pargumentyfilename. cpp. Pro argumentypoužijte seznam argumentů, které jste si poznamenali výše. filename. cpp je název zdrojového souboru reprodukci. Tento příkaz provede replikaci příkazového řádku, který jste použili pro reprodukci, ale zastaví kompilaci po průchodu preprocesoru. Pak zapíše předzpracovaný zdrojový kód do souboru filename. i.
Pokud předzpracováváte soubor zdrojového kódu C++/CX nebo používáte funkci modulů jazyka C++, je nutné provést některé další kroky. Další informace najdete v následujících částech.
Po vygenerování předzpracovaného souboru je vhodné zajistit, aby při kompilování předzpracovaného souboru byly problémy i nadále profesionálované.
Chcete-li potvrdit, že předzpracovaný soubor stále zpracovává chybu
V okně konzoly příkazového řádku pro vývojáře zadejte příkaz CLargumenty/tpnázev_souboru. chci sdělit cl.exe zkompilovat předzpracovaný soubor jako zdrojový soubor C++. Argumenty jsou stejné jako výše zachycené argumenty, ale byly odebrány všechny argumenty /d a /i . To je proto, že již byly zahrnuty do předzpracovaného souboru. filename. i je název předzpracovaného souboru.
Potvrďte, že je problém reprodukován.
Nakonec připojte předzpracovaný soubor reprodukci filename. i k sestavě.
Předzpracované přesměry kódu C++/CX WinRT/UWP
Pokud k sestavení spustitelného souboru používáte C++/CX, je nutné provést několik dalších kroků potřebných k vytvoření a ověření předzpracovaného reprodukci.
Předzpracování zdrojového kódu C++/CX
Vytvořte předzpracovaný zdrojový soubor, jak je popsáno v tématu k předzpracování souboru zdrojového kódu.
Vyhledejte ve vygenerovaném souboru filename. i soubor pro direktivy #using .
Vytvořte seznam všech odkazovaných souborů. vynechejte všechny Windows soubory. winmd, soubory platform. winmd a mscorlib.dll.
Příprava na ověření, že předzpracovaný soubor stále reprodukuje problém,
Vytvořte nový adresář pro předzpracovaný soubor a zkopírujte ho do nového adresáře.
Zkopírujte soubory. winmd ze seznamu #using do nového adresáře.
V novém adresáři vytvořte prázdný soubor vccorlib. h.
Úpravou předzpracovaného souboru odeberte všechny direktivy #using pro mscorlib.dll.
Upravte soubor předzpracovaného tak, aby se změnily všechny absolutní cesty pouze na úplné názvy souborů pro zkopírované soubory. winmd.
Potvrďte, že předzpracovaný soubor stále reprodukuje problém, jak je uvedeno výše.
Předané předběžné profesionály modulů C++
Pokud používáte funkci modulů kompilátoru jazyka C++, je nutné provést několik různých kroků pro vytvoření a ověření předzpracovaného reprodukci.
Postup předběžného zpracování souboru zdrojového kódu, který používá modul
Zachyťte argumenty příkazového řádku, které se používají k sestavení reprodukci, jak je popsáno v tématu k nahlášení obsahu příkazového řádku.
otevřete Developer Command Prompt , který odpovídá verzi Visual Studio a architektuře konfigurace použité k sestavení projektu.
Přejděte do adresáře, který obsahuje váš projekt reprodukci.
V okně konzoly příkazového řádku vývojáře zadejte příkaz cl /Pargumentsfilename.cpp. Argumenty jsou argumenty zachycené výše a filename.cpp je název zdrojového souboru, který modul využívá.
Změňte na adresář, který obsahuje projekt pro reprodukci, který sestaví rozhraní modulu (výstup .ifc).
Zachyťte argumenty příkazového řádku použité k sestavení rozhraní modulu.
V okně konzoly příkazového řádku pro vývojáře zadejte příkaz cl /Pargumentsmodulename.ixx. Argumenty jsou argumenty zachycené výše 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 reprodukoval.
Pokud chcete ověřit, že předzpracovaný soubor stále reprodukuje chybu
V okně konzoly pro vývojáře přejděte zpět do adresáře, který obsahuje váš projekt pro reprodukci.
Zadáním argumentů příkazu cl/TPfilename.i výše zkompilujte předzpracovaný soubor, jako by se jedná o zdrojový soubor C++.
Potvrďte, že problém stále reprodukuje předzpracovaný soubor.
Nakonec připojte předzpracované soubory reprodukci(názevsouboru .i a názevmodulu .i) společně s výstupem .ifc do sestavy.
Reproces odkazu
Reprodukci odkazu je obsah adresáře vygenerovaný linkerem určený buď proměnnou prostředí link_repro, nebo jako argument možnosti linkeru /LINKREPRO. Obsahuje artefakty sestavení, které souhrnně demonstrují problém, ke kterému dochází v době propojení. Příkladem může být selhání back-endu zahrnující generování kódu v době propojení (LTCG) nebo selhání linkeru. Tyto artefakty sestavení jsou potřebné jako vstup linkeru, aby bylo možné problém reprodukovat. Pomocí této proměnné prostředí můžete snadno vytvořit reprodukci odkazu. Umožňuje integrovanou funkci generování reprodukování linkeru.
Vygenerování opětovného vytvoření odkazu pomocí link_repro prostředí
Zachyťte argumenty příkazového řádku použité k sestavení reprodukování, jak je popsáno v části Hlášení obsahu příkazového řádku.
Otevřete soubor Developer Command Prompt, který odpovídá Visual Studio a architektuře konfigurace použité k sestavení projektu.
V okně konzoly příkazového řádku vývojáře přejděte do adresáře, který obsahuje váš projekt pro reprodukci.
Zadáním příkazu mkdir linkrepro vytvořte adresář s názvem linkrepro pro reprodukci odkazu. K zachycení další reprodukci odkazu můžete použít jiný název.
Zadáním sady příkazů link_repro=linkrepro nastavte proměnnou link_repro prostředí na adresář, který jste vytvořili. Pokud je sestavení spuštěno z jiného adresáře, jako je tomu často u složitějších projektů, nastavte link_repro na úplnou cestu k adresáři pro reprodukci odkazu.
Pokud chcete sestavit projekt reprodukci v Visual Studio, zadejte v okně konzoly příkazového řádku pro vývojáře příkaz devenv. Zajišťuje, že je hodnota proměnné link_repro prostředí viditelná pro Visual Studio. Pokud chcete projekt sestavit na příkazovém řádku, pomocí výše uvedených argumentů příkazového řádku duplikujte sestavení pro reprodukci.
Sestavte projekt pro reprodukci a ověřte, že došlo k očekávanému problému.
Zavřete Visual Studio, pokud jste ho použili k sestavení.
V okně konzoly příkazového řádku vývojáře zadejte sadu příkazů link_repro=, aby se link_repro prostředí.
Nakonec zabalte reprodukovanou kopii tak, že zkomprimujte celý adresář linkrepro do .zip souboru nebo podobného souboru a připojte ho k sestavě.
Možnost linkeru /LINKREPRO má stejný účinek jako link_repro prostředí. Pomocí možnosti /LINKREPROTARGET můžete zadat název, podle který se má vygenerovaný odkaz reprodukovat. Pokud chcete použít /LINKREPROTARGET,musíte zadat také možnost linkeru /OUT.
Vygenerování opětovného vytvoření odkazu pomocí možnosti /LINKREPRO
Vytvořte adresář pro reprodukci odkazu. Úplnou cestu k adresáři, kterou vytvoříte, budeme označovat jako cestu k adresáři. Pokud cesta obsahuje mezery, použijte uvozovky.
Do příkazového řádku linkeru přidejte příkaz /LINKREPRO:directory-path. V Visual Studio otevřete dialogové okno Stránky vlastností pro váš projekt. Vyberte stránku vlastnostílinkeruVlastnosti konfigurace příkazového řádku. Potom do pole Další možnosti zadejte možnost /LINKREPRO:cesta k adresáři. Zvolte OK a uložte změny.
Sestavte projekt pro reprodukci a ověřte, že došlo k očekávanému problému.
Nakonec zabalte reprodukovanou kopii tak, že zkomprimujte celý adresář pro reprodukci cesty k adresáři do .zip nebo podobného souboru a připojte ho k sestavě.
Další reproprocesy
Pokud problém nemůžete omezit na jeden zdrojový soubor nebo předzpracované reprodukci a tento problém nevyžaduje reprodukci odkazu, můžeme prozkoumat projekt integrovaného vývojového prostředí. Stále platí všechny pokyny, jak vytvořit dobrou reprodukci: 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ělo by se nacházet v jiných kompilátorech.
Vytvořte reprodukování jako minimální projekt IDE a pak ho zabalte tak, že zkomprimujte celou adresářovou strukturu 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 sestavu dostat k nám. Pomocí integrovaného Visual Studio Ohlásitproblém nebo na Visual Studio Developer Community. Dole na této stránce je také tlačítko pro odeslání názoru na produkt. Volba závisí na tom, jestli chcete použít integrované nástroje integrovaného vývojového prostředí k zachycení snímků obrazovky a uspořádání sestavy. Pokud tomu dáváte přednost, můžete web Developer Community přímo.
Poznámka
Microsoft respektuje vaše osobní údaje bez ohledu na to, jak sestavu odešlete. Společnost Microsoft se zavazuje, že bude v souladu se všemi zákony a předpisy na ochranu osobních údajů. Informace o tom, jak zacházet s daty, která nám pošlete, najdete v prohlášení o zásadách ochrany osobních údajů společnosti Microsoft.
Použití nástroje Prohlásit problém
Nástroj Nahlásit problém v Visual Studio je způsob, Visual Studio hlásit problémy několika kliknutími. Zobrazí se jednoduchý formulář pro odeslání podrobných informací o problému, který jste našli. Sestavu pak můžete odeslat, aniž byste opustili integrované vývojové prostředí (IDE).
Nahlášení problému prostřednictvím nástroje pro hlášení problémů je z integrovaného vývojového prostředí (IDE) snadné a pohodlné. Můžete k ní získat přístup z záhlaví tak, že zvolíte ikonu Odeslat názor vedle vyhledávacího Snadné spuštění pole. Nebo ho najdete na řádku nabídek v části Nápověda Odeslat názor Nahlásit problém.
Když se rozhodnete nahlásit problém, vyhledejte na webu Developer Community podobné problémy. V případě, že už váš problém byl nahlášený, vyvovote 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 Váš názor a postupujte podle pokynů k nahlášení problému.
Použití Visual Studio vývojářských Community
Stránky Visual Studio Developer Community 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 developer Community pro Visual Studio,Visual Studio pro Mac,.NET,C++, Azure DevOpsa 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é těm vašim. Možná už najdete řešení nebo jiné užitečné informace související s vaším problémem. Pokud už někdo stejný problém nahlásil, místo abyste vytvořili novou zprávu o problému, vytvářejte k této sestavě komentář. Pokud chcete okomentovat, hlasovat nebo nahlásit nový problém, můžete být vyzváni k přihlášení ke svému Visual Studio účtu. Při prvním přihlášení budete muset souhlasit s tím, abyste vývojářské aplikaci Community 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 vývojářského Community C++. Pokud problém vyhledáte a dosud nebyl nahlášen, zvolte vedle vyhledávacího pole tlačítko Nahlásit problém. 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é jsou podle vás relevantní a užitečné.
Tip
Pro jiné druhy problémů, které můžete najít v nástroji Visual Studio, které nesouvisí se sadami 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á selhání), použijte nástroj Ohlásit problém v integrovaném vývojovém prostředí. To je nejlepší volba, a to díky možnostem snímku obrazovky a schopnosti zaznamenávat akce uživatelského rozhraní, které vedlo k problému, který jste našli. Tyto druhy chyb lze také na webu Visual Studio Developer Community. Další informace najdete v tématu Jak nahlásit problém s Visual Studio.
Sestavy a ochrana osobních údajů
Všechny informace v sestavách a případné komentářea odpovědi 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á ostatní uživatelé našli. Pokud ale máte obavy o to, aby vaše data nebo identita byla veřejná, máte z důvodů ochrany osobních údajů nebo duševního vlastnictví možnosti.
Pokud vás zajímá, jak odhalíte svou identitu, vytvořte novou účet Microsoft, která o vás neodhalí žádné podrobnosti. Pomocí tohoto účtu vytvořte sestavu.
Do názvu nebo obsahu počáteční sestavy, která je veřejná, neumis ale neuchováte nic, co chcete zachovat jako soukromé. Místo toho řekněme, že podrobnosti odešlete soukromě v samostatném komentáři. Abyste se ujistili, že je sestava směrována správným lidem, zahrřte cppcompiler do seznamu témat zprávy o problému. Po vytvoření zprávy o problému je teď možné určit, kdo může zobrazit vaše odpovědi a přílohy.
Vytvoření sestavy problému pro soukromé informace
V sestavě, kterou jste vytvořili, vyberte Přidat komentář a vytvořte tak soukromý popis problému.
V editoru odpovědí použijte ovládací prvek rozevíracího seznamu pod tlačítky Odeslat a Storno 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, můžou zobrazit jenom lidé, které zadáte. Vyberte zobrazitelné moderátory a původní plakát , abyste omezili přehlednost na zaměstnance Microsoftu a sami.
Přidejte popis a další informace, obrázky a přiložené soubory, které jsou potřeba pro reprodukci. Kliknutím na tlačítko Odeslat odešlete tyto informace soukromě.
Pro připojené soubory existuje omezení na 2 GB a maximálně 10 souborů. V případě větších nahrávání si vyžádejte svůj privátní komentář k adrese URL pro odeslání.
Všechny odpovědi v rámci tohoto komentáře mají stejnou viditelnost, kterou jste zadali. Je true i v případě, že ovládací prvek DropDown na odpovědích nezobrazuje správně stav omezené viditelnosti.
Pokud chcete zachovat vaše osobní údaje a chránit vaše citlivé informace, buďte opatrní. Ponechte veškerou interakci s Microsoftem na odpovědi v rámci omezeného komentáře. Odpovědi na jiné komentáře mohou způsobit náhodné zveřejnění citlivých informací.
Postup hlášení problému dokumentace C++
k sledování problémů hlášených v naší dokumentaci používáme GitHub problémy. nyní můžete vytvořit problémy s GitHub přímo ze stránky obsahu, což vám umožní pracovat s moduly pro vytváření a produktovým týmem mnohem bohatším způsobem. Pokud se vám zobrazí problém s dokumentem, chybnou ukázkou kódu, nenáročné vysvětlení, kritická vynechání nebo dokonce jenom překlep, můžete nám snadno sdělit. Posuňte se do dolní části stránky a vyberte možnost Přihlásit se a sdělte nám svůj názor na dokumentaci. účet GitHub budete muset vytvořit, pokud ho ještě nemáte. pokud máte účet GitHub, můžete zobrazit všechny problémy s dokumentací a jejich stav. Zobrazí se také oznámení o změnách zaznamenaného problému. Další informace najdete v tématu Nový systém zpětné vazby přichází do docs.Microsoft.com.
když použijete tlačítko pro odeslání názoru k dokumentaci, vytvoříte problém s dokumentací na GitHub. Problém se automaticky vyplní informacemi o stránce, na které jste tento problém vytvořili. To znamená, jak ví, kde se problém nachází, proto tyto informace neupravujte. Stačí připojit podrobnosti o tom, co je špatně, a pokud chcete, navrhovanou opravu. Naše dokumentace C++ je open source, takže pokud chcete opravu odeslat sami, můžete. Další informace o tom, jak můžete přispívat k naší dokumentaci, najdete v Průvodci přispívajícím v GitHub.