Megosztás a következőn keresztül:


Probléma bejelentése a Microsoft C++ buildelési eszközeivel vagy dokumentációjával kapcsolatban

Ha problémákat tapasztal a Microsoft C++ fordítóban (MSVC), a linkerben vagy más eszközökben és kódtárakban, tudni szeretnénk róluk. Ha a probléma szerepel a dokumentációnkban, erről is szeretnénk tudni.

C++ eszközkészlet-probléma bejelentése

A legjobb módja annak, hogy tudassa velünk a problémát, ha elküld nekünk egy jelentést, amely tartalmazza a felderített probléma leírását. A program felépítésének minden részletével rendelkeznie kell. És tartalmaznia kell egy repro-t, egy teljes tesztesetet, a segítségével reprodukálhatjuk a problémát a saját gépeinken. Ez az információ lehetővé teszi, hogy gyorsan ellenőrizzük, hogy a probléma szerepel-e a kódban, és nem helyi a környezetében. Segít megállapítani, hogy az hatással van-e a fordító más verzióira, és diagnosztizálni annak okát.

A következő szakaszokban olvashat arról, hogy mitől lesz jó jelentés. Ismertetjük, hogyan hozhat létre a talált problématípushoz kapcsolódó repro-t, és hogyan küldheti el a jelentést a termékcsapatnak. A jelentések fontosak számunkra és más fejlesztők számára, mint Ön. Köszönjük, hogy segített a Microsoft C++ fejlesztésében!

A jelentés előkészítése

Fontos, hogy kiváló minőségű jelentést hozzunk létre, mert nem tudjuk teljes körű információ nélkül reprodukálni a talált problémát. Minél jobb a jelentés, annál hatékonyabban tudjuk újra létrehozni és diagnosztizálni a problémát.

A jelentésnek legalább a következőket kell tartalmaznia:

  • A használt eszközkészlet teljes verzióinformációja.

  • A kód létrehozásához használt teljes cl.exe parancssor.

  • A talált probléma részletes leírása.

  • A repro: egy teljes, egyszerűsített, önálló forráskód példa, amely bemutatja a problémát.

További információ a szükséges információkról és azok elérhetőségéről, valamint a jó repro létrehozásának módjáról.

Az eszközkészlet verziója

Szükségünk van a problémát okozó eszközkészlet teljes verzióinformációjára és célarchitektúrájára. Így tesztelhetjük a repro-t ugyanazokkal a szerszámkészletekkel a gépeinken. Ha reprodukálni tudjuk a problémát, ez az információ kiindulási pontként szolgál az eszközkészlet más verzióinak ugyanazzal a problémával való vizsgálatához.

A fordító teljes verziójának jelentése

  1. Nyissa meg a projekt létrehozásához használt Visual Studio-verziónak és konfigurációs architektúrának megfelelő fejlesztői parancssort . Ha például a Visual Studio 2017 használatával x64 platformon x64 célokhoz épít, válassza a x64 Native Tools Command Prompt for VS 2017lehetőséget. További információ: Fejlesztői parancssori parancsikonok.

  2. A fejlesztői parancssor konzolablakában adja meg a cl /Bv parancsot.

A kimenetnek a következőhöz hasonlóan kell kinéznie:

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

Másolja és illessze be a teljes kimenetet a jelentésbe.

A parancssor

Szükségünk van a kód létrehozásához használt pontos parancssorra, cl.exe és az összes argumentumára. Így pontosan ugyanúgy építhetjük fel a gépeinken. Ez azért fontos, mert a talált probléma csak akkor fordulhat elő, ha egy adott argumentummal vagy argumentumok kombinációjával épít.

Az információk megkeresésének legjobb helye a buildnaplóban található, közvetlenül a probléma észlelése után. Biztosítja, hogy a parancssor pontosan ugyanazokat az argumentumokat tartalmazza, amelyek hozzájárulhatnak a problémához.

A parancssor tartalmának jelentése

  1. Keresse meg a CL.command.1.tlog fájlt, és nyissa meg. Ez a fájl alapértelmezés szerint a Dokumentumok mappában található a \Visual Studio\verzió\Projects\SolutionName\ProjectName\Configuration\ProjectName.tlog\CL.command.1.tlog mappában, vagy a Felhasználói mappában a \Source\Repos\SolutionName\ProjectName\Configuration\ProjectName.tlog\CL.command.1.tlog mappában. Lehet, hogy más helyen van, ha másik buildrendszert használ, vagy ha módosította a projekt alapértelmezett helyét.

    Ebben a fájlban keresse meg a forráskódfájlok nevét, majd a fordításukhoz használt parancssori argumentumokat külön sorokban.

  2. Keresse meg annak a forráskódfájlnak a nevét tartalmazó sort, ahol a probléma előfordul. Az alatta lévő sor a megfelelő cl.exe parancsargumentumokat tartalmazza.

Másolja és illessze be a teljes parancssort a jelentésbe.

A probléma leírása

Részletes leírásra van szükségünk a talált problémáról. Így ellenőrizhetjük, hogy ugyanazt a hatást látjuk-e a gépeinkre. Számunkra is néha hasznos tudni, hogy mit próbált elérni, és mire számított.

Egy jó leírás tartalmazza a eszközkészlet által adott pontos hibaüzeneteket, illetve a pontos futásidejű viselkedést. Ezekre az információkra van szükségünk annak ellenőrzéséhez, hogy megfelelően reprodukáltuk-e a problémát. Tartalmazza a fordító összes kimenetét, ne csak az utolsó hibaüzenetet. Látnunk kell mindent, ami a jelentésben szereplő problémához vezetett. Ha a problémát a parancssori fordítóval duplikálhatja, a fordító kimenete előnyben részesíthető. Az IDE és más buildrendszerek szűrhetik a megjelenő hibaüzeneteket, vagy csak a hibaüzenet első sorát rögzíthetik.

Ha a probléma az, hogy a fordító érvénytelen kódot fogad el, és nem hoz létre diagnosztikát, vegye fel azt a jelentésbe.

A futásidejű viselkedéssel kapcsolatos problémák jelentéséhez adjon meg egy pontos másolatot arról, hogy mit nyomtat ki a program, és mit vár. Ideális esetben ágyazza be a kimeneti utasításba, például printf("This should be 5: %d\n", actual_result);. Ha a program összeomlik vagy lefagy, említse meg ezt is.

Adjon hozzá minden egyéb részletet, amely segíthet diagnosztizálni a talált problémát, például a felderített megkerülő megoldásokat. Próbálja meg nem ismételni a jelentésben máshol talált információkat.

A repro

A repro egy teljes, önálló forráskód-példa. Reprodukálható módon szemlélteti a talált problémát, így a nevet is. Szükségünk van egy repro-ra, hogy reprodukálhassuk a hibát a gépeinken. A kódnak önmagában elegendőnek kell lennie egy egyszerű végrehajtható fájl létrehozásához, amely lefordítja és futtatja. Vagy a le lehetne fordítani és futtatni, ha nem lenne a probléma, amit találtál. A repro nem kódrészlet. Teljes függvényekkel és osztályokkal kell rendelkeznie, és tartalmaznia kell az összes szükséges #include direktívát, még a standard fejlécekhez is.

Mitől jó a repro?

Egy jó repro a következő:

  • Minimális. A reprosnak a lehető legkisebbnek kell lennie, de még mindig pontosan mutatja a talált problémát. A reprosnak nem kell bonyolultnak vagy reálisnak lennie. Csak a Standardnak vagy a dokumentált fordító implementációnak megfelelő kódot kell megjeleníteniük. Hiányzó diagnosztikai hibajelenség esetén a reprodukciónak meg kell mutatnia a nem megfelelő kódot. Az egyszerű, lényegretörő reprodukciók, amelyek csak annyi kódot tartalmaznak, amennyi a probléma bemutatásához szükséges, a legjobbak. Ha meg tudja szüntetni vagy egyszerűsíteni a kódot, és továbbra is megfelelő marad, és a problémát változatlanul hagyja, akkor tegye meg. Nem szükséges a működő kód ellenpéldáit belefoglalnia.

  • Önálló. Kerülni kell a felesleges függőségeket. Ha a problémát harmadik féltől származó kódtárak nélkül is reprodukálhatja, tegye meg. Ha bármilyen könyvtári kód nélkül, csupán egyszerű kimeneti utasítások (például puts("this shouldn't compile");, std::cout << value;, és printf("%d\n", value);) mellett is reprodukálhatja a problémát, akkor tegye meg. Ideális, ha a példa egyetlen forráskódfájlba tömöríthető anélkül, hogy a felhasználói fejlécekre kellene hivatkoznia. A probléma lehetséges közreműködőjeként figyelembe veendő kód mennyiségének csökkentése rendkívül hasznos számunkra.

  • A legújabb fordítóverzió ellen. A reprosnak a legújabb frissítést kell használnia az eszközkészlet legújabb verziójára, amikor csak lehetséges. Vagy használja a következő frissítés vagy a következő fő kiadás legújabb előzetes verzióját. Az eszközkészlet régebbi verzióiban előforduló problémákat gyakran az újabb verziók javítják. A javítások csak kivételes körülmények között kerülnek vissza a régebbi verziókba.

  • Más fordítókkal összehasonlítva, ha releváns. A hordozható C++ kóddal kapcsolatos megismétlések esetén lehetőség szerint ellenőrizni kell más fordítók eredményeit. A C++ szabvány végső soron meghatározza a program helyességét, és egyetlen fordító sem tökéletes. Ha azonban a Clang és a GCC diagnosztika nélkül fogadja el a kódot, és az MSVC nem, valószínűleg hibát talált a fordítóban. (Más lehetőségek közé tartozik a Unix és a Windows viselkedésének különbségei, vagy a C++ szabvány implementálásának különböző szintjei stb.) Ha az összes fordító elutasítja a kódot, akkor valószínű, hogy a kód helytelen. A különböző hibaüzenetek segíthetnek a probléma diagnosztizálásában.

    A kódodat tesztelő online fordítók listáját megtalálhatod az ISO C++ webhelyen található Online C++ fordítók részben, vagy a GitHubon található, válogatott List of Online C++ Compilers részben. Néhány konkrét példa a Wandbox és a Compiler Explorer.

    Jegyzet

    Az online fordító webhelyei nem kapcsolódnak a Microsofthoz. Számos online fordítóprogram személyes projektként működik. Előfordulhat, hogy ezen webhelyek némelyike nem érhető el, amikor elolvassa ezt, de a keresésnek másokat is meg kell keresnie, amelyeket használhat.

A fordítóban, a linkerben és a kódtárakban felmerülő problémák általában bizonyos módokon jelennek meg. A talált probléma típusa határozza meg, hogy milyen típusú viszonosság szerepeljen a jelentésben. A megfelelő újraprodukálhatóság nélkül nincs mit vizsgálnunk. Íme néhány olyan probléma, amelyet tapasztalhat. Útmutatást tartalmazunk arra vonatkozóan, hogyan hozhat létre olyan típusú hibajelentést, amelyet az egyes problémák jelentéséhez kell használnia.

Frontend (elemző) összeomlása

A frontend összeomlások a fordítóelemző fázis során következnek be. A fordító általában végzetes C1001 hibát bocsát ki, és hivatkozik arra a forráskódfájlra és sorszámra, amelyen a hiba történt. Gyakran említ egy msc1.cpp nevű fájlt, de ezt a részletet figyelmen kívül hagyhatja.

Az ilyen típusú összeomláshoz adjon meg egy előre feldolgozott repro.

Az alábbi példafordító kimenete az ilyen típusú összeomláshoz:

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

Háttérrendszer (kódgenerálás) összeomlása

A háttérbeli összeomlások a fordító kódgenerálási fázisában fordulnak elő. A fordító általában C1001-es végzetes hibát bocsát ki, és előfordulhat, hogy nem hivatkozik a problémához társított forráskódfájlra és sorszámra. Gyakran említi a fordító\utc\src\p2\main.c fájlt, de ezt a részletet figyelmen kívül hagyhatja.

Ilyen típusú összeomlás esetén adja meg a Link reprodukciót, ha a Link-idő kódlétrehozás (LTCG) be van kapcsolva a /GL parancssori argumentummal cl.exe. Ha nem, adjon meg helyette egy előre feldolgozott repro.

Az alábbi példafordító kimenete egy háttérbeli összeomláshoz, amelyben az LTCG nincs használatban. Ha a fordító kimenete hasonló a következőhöz, adjon meg egy előfeldolgozott reprot.

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

Ha a BELSŐ FORDÍTÓHIBA kezdődő sor cl.exehelyett link.exe-t említ, akkor az LTCG be van kapcsolva. Ebben az esetben biztosítson egy Link repro hivatkozást. Ha nem egyértelmű, hogy az LTCG engedélyezve lett-e a fordító hibaüzenetéből, vizsgálja meg a parancssori argumentumokat. Átmásolta őket a buildnaplóból a /GL parancssori argumentum előző lépésében.

Linker összeomlása

A linker összeomlik a csatolási fázisban, a fordító futtatása után. A linker általában kiadja a Linker Tools hiba LNK1000-t.

Jegyzet

Ha a kimenet megemlíti a C1001-et, vagy a link-time kódgenerálást is magában foglalja, tekintse meg háttérrendszer (kódgenerálás) összeomlását.

Az ilyen típusú összeomláshoz adjon meg egy Link repro.

Íme egy példa a fordító kimenetére az ilyen típusú összeomláshoz:

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

Ha a növekményes csatolás engedélyezve van, és az összeomlás csak egy sikeres kezdeti hivatkozás után történt, azaz csak az első teljes hivatkozás után, amelyen egy későbbi növekményes hivatkozás alapul, adja meg az objektum (.obj) és a kódtár (.lib) fájljainak másolatát is, amelyek a kezdeti hivatkozás befejezése után módosított forrásfájloknak felelnek meg.

Hibás kódlétrehozás

A hibás kódlétrehozás ritkán fordul elő. Ez akkor fordul elő, ha a fordító tévesen helytelen kódot hoz létre, amely miatt az alkalmazás futásidőben összeomlik. Ehelyett a megfelelő kódot kell létrehoznia, vagy a fordításkor észlelnie kell egy problémát. Ha úgy véli, hogy a talált probléma hibás kódlétrehozást eredményez, a jelentést ugyanúgy kezelje, mint a háttérrendszer (kódgenerálás) összeomlását.

Ebben a típusú összeomlás esetén adjon meg egy Link repro-t, ha a /GL parancssori argumentumot használja a cl.exesorán. Ha nem, adjon meg egy előfeldolgozott repro változatot .

Repro létrehozása

A probléma forrásának nyomon követéséhez elengedhetetlen a jó repro. Mielőtt az alábbiakban ismertetett lépések bármelyikét elvégezené bizonyos típusú hibák esetén, próbálja meg a lehető legnagyobb mértékben tömöríteni a problémát szemléltető kódot. Próbálja meg megszüntetni vagy minimalizálni a függőségeket, a szükséges fejléceket és kódtárakat. Ha lehetséges, korlátozza a fordító beállításait és az előprocesszor-definíciókat.

Az alábbiakban bemutatjuk a különböző típusú problémák jelentéséhez használható különféle reprodukciók generálására vonatkozó útmutatásokat.

Előfeldolgozott reprodukciók

Az előre feldolgozott repro egy egyetlen forrásfájl, amely egy problémát mutat be. A C előfeldolgozó kimenetéből jön létre. A létrehozáshoz használja a /P fordító opciót az eredeti repro forrásfájlban. Ez a beállítás befoglalja a belefoglalt fejléceket, hogy eltávolítsa a más forrás- és fejlécfájloktól való függőségeket. A beállítás a helyi környezettől függő makrókat, #ifdef feltételes és egyéb előfeldolgozási parancsokat is feloldja.

Jegyzet

Az előfeldolgozott repros nem olyan hasznos az olyan problémák esetén, amelyek a szokásos kódtár-implementáció hibáinak lehetnek az eredménye, mivel gyakran a legújabb, folyamatban lévő implementációt szeretnénk lecserélni, hogy lássuk, megoldottuk-e már a problémát. Ebben az esetben ne készítse előre az újraalkotást, és ha nem tudja egyetlen forrásfájlra szűkíteni a problémát, csomagolja be a kódot egy .zip fájlba vagy valami hasonlóba, vagy fontolja meg egy IDE projekt újraalkotásának használatát. További információért lásd: Egyéb reprodukciók.

Forráskódfájl előfeldolgozása

  1. Rögzítse a reprodukció létrehozására használt parancssori argumentumokat az -ben leírtak szerint a parancssor tartalmának jelentéséhez.

  2. Nyissa meg a projekt létrehozásához használt Visual Studio-verziónak és konfigurációs architektúrának megfelelő fejlesztői parancssort .

  3. Váltson a repro projektet tartalmazó könyvtárra.

  4. A fejlesztői parancssor konzolablakában adja meg a cl/Pargumentumokatfilename.cpp. A(z) argumentumokesetében használja a fent rögzített argumentumok listáját. filename.cpp a repro forrásfájl neve. Ez a parancs replikálja a feladathoz használt parancssort, de az előfeldolgozó átadása után leállítja a fordítást. Ezután írja az előfeldolgozott forráskódot a(z) filename.ifájlba.

Ha egy C++/CX forráskódfájlt előfeldolgoz, vagy a C++ modulok funkciót használja, további lépésekre van szükség. További információt az alábbi szakaszokban talál.

Az előfeldolgozott fájl létrehozása után érdemes meggyőződni arról, hogy a probléma továbbra is fennáll az előfeldolgozott fájl lefordításakor.

Annak ellenőrzéséhez, hogy az előfeldolgozott fájl újra előidézi-e a hibát

  1. A fejlesztői parancssori konzolablakban adja meg a parancsot clarguments/TPfilename.i, hogy cl.exe fordítsa le az előfeldolgozott fájlt C++ forrásfájlként. Az argumentumok megegyeznek a fent rögzített argumentumokkal, de a /D és /I argumentumok el lettek távolítva. Ennek az az oka, hogy már szerepeltek az előre feldolgozott fájlban. A filename.i az előre feldolgozott fájl neve.

  2. Ellenőrizze, hogy a probléma újra előállítható-e.

Végül csatolja az előre feldolgozott repro fájlt ".i" névvel a jelentéshez.

Előre feldolgozott C++/CX WinRT/UWP kód reprodukciók

Ha C++/CX használatával hozza létre a végrehajtható fájlt, néhány további lépés szükséges az előre feldolgozott feladat létrehozásához és érvényesítéséhez.

C++/CX forráskód előfeldolgozása

  1. Hozzon létre egy előfeldolgozott forrásfájlt az alábbiak szerint a - Forráskódfájl előfeldolgozása rész leírása alapján.

  2. A létrehozott fájlnévben.i fájlban keresse meg #using irányelveket.

  3. Készítsen listát az összes hivatkozott fájlról. Hagyja ki a Windows*.winmd fájlokat, a platform.winmd fájlokat és a mscorlib.dll.

Annak ellenőrzéséhez, hogy az előfeldolgozott fájl továbbra is reprodukálja-e a problémát,

  1. Hozzon létre egy új könyvtárat az előre feldolgozott fájlhoz, és másolja az új könyvtárba.

  2. Másolja a .winmd fájlokat a #using listából az új könyvtárba.

  3. Hozzon létre egy üres vccorlib.h fájlt az új könyvtárban.

  4. Szerkessze az előfeldolgozott fájlt, hogy eltávolítsa a #using irányelveket a mscorlib.dllszámára.

  5. Szerkessze az előfeldolgozott fájlt, hogy az abszolút elérési utakat csak a másolt .winmd fájlok csupasz fájlnevére módosítsa.

Győződjön meg arról, hogy az előfeldolgozott fájl továbbra is reprodukálja a problémát, a fentieknek megfelelően.

Előre feldolgozott C++ modulok reprodukciói

Ha a C++ fordító modulok funkcióját használja, az előfeldolgozott reprodukció létrehozásához és érvényesítéséhez különböző lépések szükségesek.

Modult használó forráskódfájl előfeldolgozása

  1. Rögzítse a reprodukció létrehozására használt parancssori argumentumokat az -ben leírtak szerint a parancssor tartalmának jelentéséhez.

  2. Nyissa meg a projekt létrehozásához használt Visual Studio-verziónak és konfigurációs architektúrának megfelelő fejlesztői parancssort .

  3. Váltson a repro projektet tartalmazó könyvtárra.

  4. A fejlesztői parancssor konzolablakában adja meg a cl/Pargumentumokatfilename.cpp. Az argumentumok a fent rögzített argumentumok, és filename.cpp a modult használó forrásfájl neve.

  5. Váltson a modulfelületet (.ifc kimenetet) tartalmazó repro projektet tartalmazó könyvtárra.

  6. Rögzítse a modul felületének létrehozásához használt parancssori argumentumokat.

  7. A fejlesztői parancssor konzolablakában adja meg a cl /Pargumentumokmodulename.ixx parancsot. Az argumentumok a fent rögzített argumentumok, a modulename.ixx pedig annak a fájlnak a neve, amely létrehozza a modul felületét.

Az előfeldolgozott fájlok létrehozása után érdemes meggyőződni arról, hogy a probléma továbbra is jelentkezik az előfeldolgozott fájl használatakor.

Annak ellenőrzéséhez, hogy az előfeldolgozott fájl újra előidézi-e a hibát

  1. A fejlesztői konzolablakban térjen vissza a repro projektet tartalmazó könyvtárra.

  2. Adja meg a parancsot, clargumentumokat/TPfájlnév.i a fenti módon, hogy az előfeldolgozott fájl úgy legyen lefordítva, mintha C++ forrásfájl lenne.

  3. Győződjön meg arról, hogy az előre feldolgozott fájl továbbra is reprodukálja a problémát.

Végül csatolja az előre feldolgozott repro fájlokat (filename.i és modulename.i) a .ifc kimenettel együtt a jelentéshez.

Modulkövetési fájl létrehozása

Ha a problémák C++ modulokat érintenek, adjon meg egy modul nyomkövetési fájlt, valamint az előre feldolgozott repro javítja a diagnosztikai minőséget a fordulási idő csökkentése érdekében. A modulkövetési fájl részletes információkat rögzít a modulműveletekről a fordítás során.

Ideális, ha a példa egyetlen forráskódfájlba tömöríthető anélkül, hogy a felhasználói fejlécekre kellene hivatkoznia.

A probléma lehetséges közreműködőjeként figyelembe veendő kód mennyiségének csökkentése rendkívül hasznos számunkra. A /MP vagy több forrásból történő meghívások használatával a nyomkövetés csak az utolsó lefordított fájlt jelölheti, vagy hiányos lehet. Ha nem tudja egyetlen forrásfájlra csökkenteni a problémát, csomagolja be a kódot egy .zip fájlba vagy hasonlóba, vagy fontolja meg egy IDE-projekt feladatának használatát. További információért lásd: Egyéb reprodukciók.

  1. Nyissa meg a projekt létrehozásához használt Visual Studio-verziónak és konfigurációs architektúrának megfelelő fejlesztői parancssort .
  2. Adja meg az [cl /d1module:enableLogging] filename.cpp parancsot trace.json. trace.json esetében adja meg a modulkövetéshez kívánt kimeneti fájlnevét. Nem lehet szóköz a kimeneti fájl neve között /d1module:enableLogging . Az [other-args] esetében adjon meg további fordítási argumentumokat. Adja meg a(z) filename.cpp forrásfájlt, amely reprodukálja a problémát.
  3. Ha több fordítási egység is érintett a problémában, futtasson külön egyfájlos hívásokat a problémát reprodukáló adott fájl nyomkövetésének gyűjtéséhez. Szükség esetén további releváns fájlok nyomkövetését is gyűjtheti.

Végül csatolja a létrehozott trace.json fájlt és az előre feldolgozott repro-t a jelentéshez.

A link repro egy könyvtár hivatkozáskészítő által létrehozott tartalma, amelyet vagy a link_repro környezeti változó, vagy a /LINKREPRO linker beállítás argumentuma határoz meg. Olyan build artifaktumokat tartalmaz, amelyek együttesen szemléltetnek egy problémát, ami az összekapcsolási időpontban jelentkezik. Ilyen példák a háttér-összeomlás, amely magában foglalhatja a Link-Time Code Generation (LTCG) használatát, vagy a linker összeomlása. Ezek a buildösszetevők szükségesek a linker bemeneteként, hogy a probléma reprodukálható legyen. Ezzel a környezeti változóval egyszerűen létrehozhat egy linkreprodukciót. Lehetővé teszi a linker beépített reprogenerációs képességét.

  1. Rögzítse a reprodukció létrehozására használt parancssori argumentumokat az -ben leírtak szerint a parancssor tartalmának jelentéséhez.

  2. Nyissa meg a projekt létrehozásához használt Visual Studio-verziónak és konfigurációs architektúrának megfelelő fejlesztői parancssort .

  3. A fejlesztői parancssor konzolablakában váltson a repro projektet tartalmazó könyvtárra.

  4. Adja be a „mkdir linkrepro” parancsot, hogy létrehozzon egy „linkrepro” nevű könyvtárat a "link repro" céljára. Egy másik névvel rögzíthet egy új hivatkozás reprodukciót.

  5. Adja ki a set link_repro=linkrepro parancsot a link_repro környezeti változó beállításához az Ön által létrehozott könyvtárra. Ha a build egy másik könyvtárból fut, ahogyan az összetettebb projektek esetében is gyakran előfordul, állítsa be a link_repro a hivatkozási repro könyvtár teljes elérési útjára.

  6. A repro projekt Visual Studióban való létrehozásához a fejlesztői parancssori konzolablakban adja meg a devenv parancsot. Biztosítja, hogy a link_repro környezeti változó értéke látható legyen a Visual Studióban. A projekt parancssori összeállításához használja a fent rögzített parancssori argumentumokat a repro build duplikálásához.

  7. Hozza létre a repro projektet, és győződjön meg arról, hogy a várt probléma jelentkezett.

  8. Zárja be a Visual Studiót, ha a buildeléshez használta.

  9. A fejlesztői parancssor konzolablakában írja be a set link_repro= parancsot a link_repro környezeti változó törléséhez.

Végül csomagolja be a reprot úgy, hogy a teljes linkrepro könyvtárat egy .zip fájlba vagy hasonlóba tömöríti, és csatolja a jelentéshez.

A /LINKREPRO linker kapcsoló hatása megegyezik a link_repro környezeti változóval. A /LINKREPROTARGET beállítással megadhatja, hogy milyen névre szeretne szűrni a generált link repro esetében. A /LINKREPROTARGEThasználatához meg kell adnia a /OUT linker beállítást is.

  1. Hozzon létre egy könyvtárat a hivatkozási tároló számára. A létrehozott teljes elérési útra a címtárban hivatkozunk. Ha szóközöket tartalmaz, használjon dupla idézőjeleket az útvonal körül.

  2. Adja hozzá a /LINKREPRO:directory-path parancsot a linker parancssorához. A Visual Studióban nyissa meg a projekt Tulajdonságlapok párbeszédpanelt. Válassza a Konfigurációs tulajdonságok>Linker>Parancssor tulajdonságlapját. Ezután írja be a /LINKREPRO:címtár-elérési utat a További beállítások mezőbe. A módosítások mentéséhez válassza az OK lehetőséget.

  3. Hozza létre a repro projektet, és győződjön meg arról, hogy a várt probléma jelentkezett.

Végül csomagolja be a repro-t úgy, hogy tömöríti a teljes könyvtárelérési csatolási repro könyvtárat egy .zip fájlba vagy hasonlóba, és csatolja a jelentéshez.

Egyéb reprodukciók

Ha a problémát nem tudja egyetlen forrásfájlra vagy előfeldolgozott újraalkotásra csökkenteni, és a probléma nem igényel hivatkozási újraalkotást, megvizsgálhatunk egy IDE-projektet. A jó repro létrehozásának minden útmutatója továbbra is érvényes: A kódnak minimálisnak és önállónak kell lennie. A probléma az általunk használt legújabb eszközökben jelentkezik, és ha releváns, nem tapasztalható más fordítók esetében.

Hozza létre a repro-t minimális IDE-projektként, majd csomagolja be úgy, hogy a teljes könyvtárstruktúrát egy .zip fájlba vagy hasonlóba tömöríti, és csatolja a jelentéshez.

A jelentés elküldésének módjai

Neked van néhány jó módod arra, hogy eljuttasd hozzánk a jelentésedet. Használhatja a Visual Studio beépített problémajelentési eszközét vagy a Visual Studio Fejlesztői közösség lapját. A lap alján egy Termékvisszajelzés gomb is található. A választás attól függ, hogy az IDE beépített eszközeit használja-e képernyőképek készítéséhez és a jelentés rendszerezéséhez. Ha nem szeretné, közvetlenül használhatja a fejlesztői közösség webhelyét.

Jegyzet

A Jelentés elküldésének módjától függetlenül a Microsoft tiszteletben tartja az Ön adatait. A Microsoft elkötelezett amellett, hogy megfeleljen az adatvédelmi törvényeknek és előírásoknak. Az Ön által küldött adatok kezeléséről a Microsoft adatvédelmi nyilatkozatában olvashat.

A Probléma jelentése eszköz használata

A Visual Studio Probléma jelentése eszközével a Visual Studio felhasználói mindössze néhány kattintással jelenthetnek problémákat. Megjelenik egy egyszerű űrlap, amely részletes információkat küld a talált problémáról. Ezután anélkül küldheti el a jelentést, hogy elhagyná az IDE-t.

A Probléma jelentése eszközzel egyszerűen és kényelmesen jelentheti a problémát az IDE-ből. A címsávról a Visszajelzés küldése ikont választva érheti el a Gyorsindítás keresés mező mellett. Vagy a Súgó>Problémajelentés>Visszajelzés küldésemenüsávján is megtalálható.

Ha a probléma bejelentése mellett dönt, először keressen rá a fejlesztői közösségre hasonló problémákra. Ha a problémát korábban már bejelentették, vegye fel a jelentést, és adjon hozzá további részleteket tartalmazó megjegyzéseket. Ha nem lát hasonló problémát, válassza a Visual Studio Visszajelzés párbeszédpanel alján található Jelentés új probléma gombot, és kövesse a probléma bejelentéséhez szükséges lépéseket.

A Visual Studio fejlesztői közösségi oldalainak használata

A Visual Studio fejlesztői közösségi oldalai kényelmesen jelenthetik a problémákat, és megoldást találhatnak a Visual Studióra és a C++ fordítóra, az eszközökre és a kódtárakra. A Visual Studio, a Visual Studio for Mac, a .NET, a C++, az Azure DevOps és az Azure DevOps Server speciális fejlesztői közösségi oldalai érhetők el.

A közösség lapjai alatt, az egyes lapok tetején egy keresőmező található. Segítségével olyan bejegyzéseket kereshet, amelyek az Önhöz hasonló problémákat jelentenek. Előfordulhat, hogy a problémával kapcsolatos megoldás vagy egyéb hasznos információ már elérhető. Ha valaki korábban is jelentette ugyanezt a problémát, akkor ahelyett, hogy új problémajelentést hoz létre, hozzon létre egy megjegyzést a jelentéshez. Új probléma megjegyzéséhez, szavazásához vagy jelentéséhez előfordulhat, hogy be kell jelentkeznie a Visual Studio-fiókjába. Az első bejelentkezéskor el kell fogadnia, hogy hozzáférést biztosít a fejlesztői közösségi alkalmazásnak a profiljához.

A C++ fordítóval, a linkerrel és más eszközökkel és kódtárakkal kapcsolatos problémák esetén először keresse meg a C++ fejlesztői közösségi oldalt. Ha rákeres a problémájára, és még nem került jelentésre, válassza a Probléma bejelentése gombot a keresőmező mellé. Felveheti a repro kódot és a parancssort, a képernyőképeket, a kapcsolódó beszélgetésekre mutató hivatkozásokat, valamint minden olyan információt, amelyet relevánsnak és hasznosnak tart.

Borravaló

A fejlesztői közösség kezdeti jelentésében szereplő információk mindig nyilvánosak lesznek. Ha ez aggodalomra ad okot, tekintse meg a jelentésekről és az adatvédelemről szóló következő szakaszt.

Borravaló

A Visual Studióban a Microsoft C++ buildeszközökhöz nem kapcsolódó egyéb problémák (például felhasználói felületi problémák, hibás IDE-funkciók vagy általános összeomlások) esetén használja a Probléma jelentése eszközt az IDE-ben. Ez a legjobb választás a képernyőképek képességeinek és a talált problémához vezető felhasználói felületi műveletek rögzítésének képessége miatt. Az ilyen típusú hibák a Visual Studio fejlesztői közösségi webhelyén is kereshetők. További információért lásd: Hogyan lehet jelenteni egy problémát a Visual Studioesetében.

Jelentések és adatvédelem

A jelentésekben szereplő összes információ, valamint a megjegyzések és válaszok alapértelmezés szerint nyilvánosan láthatók. Ez általában előnyös, mert lehetővé teszi, hogy a teljes közösség lássa a más felhasználók által talált problémákat, megoldásokat és kerülő megoldásokat. Ha azonban adatvédelmi vagy szellemi tulajdonjogi okokból aggódik az adatai vagy identitása nyilvánossá tétele miatt, lehetősége van rá.

Ha aggódik az identitása felfedése miatt, hozzon létre egy új Microsoft-fiókot , amely nem fedi fel az Ön adatait. Ezzel a fiókkal hozhatja létre a jelentést.

Ne írjon semmit, amit privátnak szeretne megtartani a kezdeti jelentés címében vagy tartalmában, mivel ez nyilvános. Ehelyett tegyük fel, hogy külön megjegyzésben privát módon fogja elküldeni a részleteket. Annak érdekében, hogy a jelentés a megfelelő személyekhez legyen irányítva, vegye fel a cppcompilert a problémajelentés témakörlistájába. A problémajelentés létrehozása után megadhatja, hogy ki láthatja a válaszokat és a mellékleteket.

Problémajelentés létrehozása személyes adatokhoz

  1. A létrehozott jelentésben válassza a Megjegyzés hozzáadása lehetőséget a probléma privát leírásának létrehozásához.

  2. A válaszszerkesztőben a Küldés és a Mégse gomb alatti legördülő menüben adja meg a válasz célközönségét. Csak a megadott személyek láthatják ezeket a privát válaszokat, valamint a bennük szereplő képeket, hivatkozásokat vagy kódot. Válassza Moderátorok által megtekinthető és az eredeti poszter a Microsoft-alkalmazottak és saját maga láthatóságának korlátozásához.

  3. Adja hozzá a leírást és minden egyéb információt, képet és fájlmellékletet, amely a reprohoz szükséges. Válassza a Küldés gombot az információk privát elküldéséhez.

    A csatolt fájlokra 2 GB-os korlát vonatkozik, és legfeljebb 10 fájlra. Nagyobb feltöltések esetén kérjen egy feltöltési URL-címet a privát megjegyzésében.

A megjegyzésben szereplő válaszok láthatósága megegyezik az Ön által megadott korlátozott láthatósági viszonyokkal. Ez akkor is igaz, ha a válaszok legördülő vezérlője nem jeleníti meg megfelelően a korlátozott láthatósági állapotot.

Az adatvédelem megőrzése és a bizalmas adatok közszemlére kerülésének elkerülése érdekében, legyen óvatos. A korlátozott megjegyzésben szereplő válaszokhoz tartsa a Microsofttal való minden interakciót. Az egyéb megjegyzésekre adott válaszok miatt véletlenül bizalmas információkat tehet közzé.

C++ dokumentációs probléma bejelentése

Ha dokumentummal, hibás kódmintával, zavaros magyarázattal, kritikus kihagyással vagy akár elírással kapcsolatos problémát lát, egyszerűen tudassa velünk a lapon található visszajelzési gombokkal. 2024 óta már nem használjuk a GitHub-problémákat a jelentett problémák nyomon követésére. További információ: A Microsoft Learn új visszajelzési módjának bejelentése.

C++ dokumentumaink nyílt forráskódúak, ezért ha saját maga szeretne javítást küldeni, megteheti. A dokumentációnkhoz való hozzájárulás módjáról további információt a GitHub hozzájárulási útmutatójában talál.