Udostępnij za pośrednictwem


Jak zgłosić problem z zestawem narzędzi lub dokumentacją języka Microsoft C++

Jeśli znajdziesz problemy w kompilatorze języka Microsoft C++ (MSVC), konsolidatorze lub innych narzędziach i bibliotekach, chcemy o nich wiedzieć. Gdy problem znajduje się w naszej dokumentacji, chcemy również o tym wiedzieć.

Jak zgłosić problem z zestawem narzędzi języka C++

Najlepszym sposobem, aby poinformować nas o problemie, jest wysłanie nam raportu zawierającego opis wykrytego problemu. Powinien on zawierać wszystkie szczegóły dotyczące sposobu tworzenia programu. Powinno to obejmować odtworzenie, kompletny przypadek testowy, który możemy użyć do odtworzenia problemu na naszych maszynach. Te informacje pozwalają nam szybko sprawdzić, czy problem istnieje w naszym kodzie i nie jest lokalny dla Twojego środowiska. Pomaga nam to określić, czy ma wpływ na inne wersje kompilatora, i zdiagnozować jego przyczynę.

W poniższych sekcjach przeczytaj, co sprawia, że raport jest dobry. Opisujemy sposób generowania odtworzenia dla znalezionego problemu oraz sposobu wysyłania raportu do zespołu produktu. Twoje raporty są dla nas ważne i dla innych deweloperów, takich jak Ty. Dziękujemy za pomoc w ulepszaniu języka Microsoft C++!

Jak przygotować raport

Ważne jest utworzenie raportu o wysokiej jakości, ponieważ trudno nam odtworzyć znaleziony problem bez pełnych informacji. Tym lepiej jest raport, tym skuteczniej możemy odtworzyć i zdiagnozować problem.

Raport powinien zawierać co najmniej:

  • Pełne informacje o wersji używanego zestawu narzędzi.

  • Pełny cl.exe wiersza polecenia używany do kompilowania kodu.

  • Szczegółowy opis znalezionego problemu.

  • Odtworzenie: kompletny, uproszczony, samodzielny przykład kodu źródłowego, który demonstruje problem.

Przeczytaj, aby dowiedzieć się więcej o konkretnych potrzebnych informacjach i sposobie ich znalezienia oraz sposobie tworzenia dobrego odtworzenia.

Wersja zestawu narzędzi

Potrzebujemy pełnych informacji o wersji i docelowej architektury zestawu narzędzi, który powoduje problem. Dzięki temu możemy przetestować twoje odtworzenie na tych samych zestawach narzędzi na naszych maszynach. Jeśli możemy odtworzyć problem, te informacje dają nam również punkt wyjścia do zbadania, które inne wersje zestawu narzędzi mają ten sam problem.

Aby zgłosić pełną wersję kompilatora

  1. Otwórz wiersz polecenia dla deweloperów zgodny z wersją programu Visual Studio i architekturą konfiguracji używaną do kompilowania projektu. Jeśli na przykład kompilujesz przy użyciu programu Visual Studio 2017 w wersji x64 dla elementów docelowych x64, wybierz pozycję x64 Native Tools Command Prompt for VS 2017 (Wiersz polecenia narzędzi natywnych x64 dla programu VS 2017). Aby uzyskać więcej informacji, zobacz Skróty wiersza polecenia dla deweloperów.

  2. W oknie konsoli wiersza polecenia dewelopera wprowadź polecenie cl /Bv.

Dane wyjściowe powinny wyglądać podobnie do następujących:

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

Skopiuj i wklej całe dane wyjściowe do raportu.

Wiersz polecenia

Potrzebujemy dokładnego wiersza polecenia, cl.exe i wszystkich jego argumentów, używanych do kompilowania kodu. Dzięki temu możemy ją skompilować w dokładnie taki sam sposób na naszych maszynach. Ważne jest, ponieważ znaleziony problem może istnieć tylko podczas kompilowania z określonym argumentem lub kombinacją argumentów.

Najlepsze miejsce do znalezienia tych informacji znajduje się w dzienniku kompilacji natychmiast po wystąpieniu problemu. Gwarantuje to, że wiersz polecenia zawiera dokładnie te same argumenty, które mogą przyczynić się do problemu.

Aby zgłosić zawartość wiersza polecenia

  1. Znajdź plik CL.command.1.tlog i otwórz go. Domyślnie ten plik znajduje się w folderze Documents w folderze \Visual Studio version\Projects\SolutionName ProjectName\ProjectName Configuration\ProjectName.tlog\\CL.command.1.tlog lub w folderze User w folderze \Source\Repos\SolutionName ProjectName\Configuration\ProjectName.tlog\\CL.command.1.tlog. Może to być w innej lokalizacji, jeśli używasz innego systemu kompilacji lub jeśli zmieniono domyślną lokalizację projektu.

    W tym pliku znajdź nazwy plików kodu źródłowego, a następnie argumenty wiersza polecenia używane do ich skompilowania, z których każda znajduje się w osobnych wierszach.

  2. Znajdź wiersz zawierający nazwę pliku kodu źródłowego, w którym występuje problem. Poniższy wiersz zawiera odpowiednie argumenty polecenia cl.exe.

Skopiuj i wklej cały wiersz polecenia do raportu.

Opis problemu

Potrzebujemy szczegółowego opisu znalezionego problemu. Dzięki temu możemy sprawdzić, czy widzimy ten sam wpływ na nasze maszyny. Czasami przydaje się nam również wiedzieć, co próbujesz osiągnąć i co się spodziewałeś.

Dobry opis zawiera dokładne komunikaty o błędach podane przez zestaw narzędzi lub dokładne zachowanie środowiska uruchomieniowego. Potrzebujemy tych informacji, aby sprawdzić, czy problem został prawidłowo odtworzony. Uwzględnij wszystkie dane wyjściowe kompilatora, a nie tylko ostatni komunikat o błędzie. Musimy zobaczyć wszystko, co doprowadziło do zgłoszenia problemu. Jeśli problem można zduplikować przy użyciu kompilatora wiersza polecenia, preferowane są dane wyjściowe kompilatora. Środowisko IDE i inne systemy kompilacji mogą filtrować wyświetlane komunikaty o błędach lub przechwytywać tylko pierwszy wiersz komunikatu o błędzie.

Jeśli problem polega na tym, że kompilator akceptuje nieprawidłowy kod i nie generuje diagnostyki, uwzględnij je w raporcie.

Aby zgłosić problem z zachowaniem środowiska uruchomieniowego, uwzględnij dokładną kopię tego, co program drukuje i czego oczekujesz. Najlepiej osadzić go w samej instrukcji wyjściowej, na przykład printf("This should be 5: %d\n", actual_result);. Jeśli program ulegnie awarii lub zawiesza się, należy również wspomnieć o tym.

Dodaj wszelkie inne szczegóły, które mogą pomóc nam zdiagnozować znaleziony problem, na przykład wszelkie odnalezione obejścia pracy. Spróbuj nie powtórzyć informacji znalezionych w innym miejscu raportu.

Odtworzenie

Odtworzenie jest kompletnym, samodzielnym przykładem kodu źródłowego. Odtwarzanie demonstruje znaleziony problem, stąd nazwa. Potrzebujemy odtwarzania, aby można było odtworzyć błąd na naszych maszynach. Kod powinien być wystarczający do utworzenia podstawowego pliku wykonywalnego, który kompiluje i uruchamia. Można też skompilować i uruchomić polecenie , jeśli nie zostanie znaleziony problem. Odtworzenie nie jest fragmentem kodu. Powinien mieć pełne funkcje i klasy oraz zawierać wszystkie niezbędne dyrektywy #include, nawet dla nagłówków standardowych.

Co sprawia, że dobry repro

Dobrym odtworzeniem jest:

  • Minimalny. Repros powinien być tak mały, jak to możliwe, ale nadal demonstrować dokładnie znaleziony problem. Repros nie musi być złożony ani realistyczny. Muszą jedynie pokazać kod zgodny ze standardem lub udokumentowaną implementacją kompilatora. W przypadku braku diagnostyki odtworzenie powinno zawierać kod, który nie jest zgodny. Proste, do-punktowego repozytorium, które zawierają tylko wystarczającą ilość kodu, aby zademonstrować problem, są najlepsze. Jeśli możesz wyeliminować lub uprościć kod i zachować zgodność, a także pozostawić problem bez zmian, zrób to. Nie musisz uwzględniać przykładów kodu, który działa.

  • Samodzielny. Repros powinien unikać niepotrzebnych zależności. Jeśli możesz odtworzyć problem bez bibliotek innych firm, zrób to. Jeśli możesz odtworzyć problem bez żadnego kodu biblioteki oprócz prostych instrukcji wyjściowych (na przykład puts("this shouldn't compile");, , std::cout << value;i printf("%d\n", value);), wykonaj to. Jest to idealne rozwiązanie, jeśli przykład można skondensować do pojedynczego pliku kodu źródłowego bez odwołania do nagłówków użytkownika. Zmniejszenie ilości kodu, który musimy wziąć pod uwagę jako możliwy wkład w problem, jest dla nas niezwykle pomocne.

  • W najnowszej wersji kompilatora. Repozytorium powinno używać najnowszej aktualizacji do najnowszej wersji zestawu narzędzi, jeśli jest to możliwe. Możesz też użyć najnowszej wersji wstępnej następnej aktualizacji lub następnej wersji głównej. Problemy, które można znaleźć w starszych wersjach zestawu narzędzi, są często rozwiązywane w nowszych wersjach. Poprawki są przywracane do starszych wersji tylko w wyjątkowych okolicznościach.

  • W razie potrzeby sprawdzono względem innych kompilatorów . Repros, które obejmują przenośny kod C++ powinien zweryfikować zachowanie względem innych kompilatorów, jeśli to możliwe. Standard C++ ostatecznie określa poprawność programu i żaden kompilator nie jest doskonały. Jeśli jednak język Clang i GCC akceptują kod bez diagnostyki, a MSVC nie, prawdopodobnie w naszym kompilatorze znaleziono usterkę. (Inne możliwości obejmują różnice w zachowaniu systemów Unix i Windows lub różnych poziomach implementacji standardów języka C++ itd.) Gdy wszystkie kompilatory odrzucają kod, prawdopodobnie kod jest niepoprawny. Wyświetlanie różnych komunikatów o błędach może pomóc samodzielnie zdiagnozować problem.

    Listy kompilatorów online do testowania kodu można znaleźć w kompilatorach języka C++ online w witrynie internetowej ISO C++ lub tej wyselekcjonowanej listy kompilatorów języka C++ online w witrynie GitHub. Niektóre konkretne przykłady obejmują Wandbox i Eksplorator kompilatora.

    Uwaga

    Witryny internetowe kompilatora online nie są powiązane z firmą Microsoft. Wiele witryn internetowych kompilatora online jest uruchamianych jako projekty osobiste. Niektóre z tych witryn mogą być niedostępne podczas czytania, ale wyszukiwanie powinno znaleźć inne, których możesz użyć.

Problemy w kompilatorze, konsolidatorze i w bibliotekach mają tendencję do pokazywania się w określony sposób. Rodzaj problemu, który znajdziesz, określi, jakiego rodzaju odtworzenie należy uwzględnić w raporcie. Bez odpowiedniego odtworzenia nie mamy nic do zbadania. Oto kilka rodzajów problemów, które mogą zostać wyświetlone. Dołączamy instrukcje dotyczące generowania rodzaju odtworzenia, którego należy użyć do zgłaszania każdego rodzaju problemu.

Awaria frontonu (analizatora)

Awarie frontonu występują w fazie analizowania kompilatora. Zazwyczaj kompilator emituje błąd krytyczny C1001 i odwołuje się do pliku kodu źródłowego i numeru wiersza, na którym wystąpił błąd. Często wspomina o pliku o nazwie msc1.cpp, ale można zignorować ten szczegół.

W przypadku tego rodzaju awarii podaj wstępnie przetworzone odtworzenie.

Oto przykładowe dane wyjściowe kompilatora dla tego rodzaju awarii:

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

Awaria zaplecza (generowanie kodu)

Awarie zaplecza występują w fazie generowania kodu kompilatora. Zazwyczaj kompilator emituje błąd krytyczny C1001 i może nie odwoływać się do pliku kodu źródłowego i numeru wiersza skojarzonego z problemem. Często wspomina on kompilator plików\utc\src\p2\main.c, ale można zignorować ten szczegół.

W przypadku tego rodzaju awarii podaj link do odtworzenia , jeśli używasz generowania kodu czasowego łącza (LTCG), włączonego przez argument wiersza polecenia /GL w celu cl.exe. Jeśli tak nie jest, podaj wstępnie przetworzone ponowne odtworzenie .

Oto przykładowe dane wyjściowe kompilatora dla awarii zaplecza, w której ltCG nie jest używana. Jeśli dane wyjściowe kompilatora wyglądają podobnie do poniższych, należy podać wstępnie przetworzoną ponownie.

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

Jeśli wiersz rozpoczynający się od WEWNĘTRZNEGO BŁĘDU KOMPILATORA wspomina link.exe, a nie cl.exe, ltCG został włączony. W tym przypadku podaj ponownie link. Jeśli nie jest jasne, czy funkcja LTCG została włączona z komunikatu o błędzie kompilatora, sprawdź argumenty wiersza polecenia. Skopiowano je z dziennika kompilacji w poprzednim kroku dla argumentu wiersza polecenia /GL .

Awaria konsolidatora

Awarie konsolidatora występują w fazie łączenia po uruchomieniu kompilatora. Zazwyczaj konsolidator emituje błąd narzędzi konsolidatora LNK1000.

Uwaga

Jeśli dane wyjściowe zawierają wzmiankę O C1001 lub obejmuje generowanie kodu czasu połączenia, zapoznaj się z zamiast tego awarią zaplecza (generowania kodu).

W przypadku tego rodzaju awarii podaj odtworzenie linku.

Oto przykład danych wyjściowych kompilatora dla tego rodzaju awarii:

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

Jeśli łączenie przyrostowe jest włączone, a awaria wystąpiła dopiero po pomyślnym łączem początkowym, czyli dopiero po pierwszym pełnym linku, na którym jest oparty później link przyrostowy, podaj również kopię obiektu (.obj) i plików biblioteki (lib), które odpowiadają plikom źródłowym zmodyfikowanym po zakończeniu początkowego łącza.

Nieprawidłowe generowanie kodu

Nieprawidłowe generowanie kodu jest rzadkie. Występuje, gdy kompilator błędnie generuje niepoprawny kod, który powoduje awarię aplikacji w czasie wykonywania. Zamiast tego powinien wygenerować poprawny kod lub wykryć problem w czasie kompilacji. Jeśli uważasz, że wykryty problem powoduje nieprawidłowe generowanie kodu, traktuj raport tak samo jak awaria zaplecza (generowania kodu).

W przypadku tego rodzaju awarii podaj link do odtworzenia , jeśli używasz argumentu wiersza polecenia /GL do cl.exe. Jeśli nie, podaj wstępnie przetworzony proces odtworzenia.

Jak wygenerować odtworzenie

Aby pomóc nam w wytropieniu źródła problemu, ważne jest dobre odtworzenie . Przed wykonaniem dowolnych kroków opisanych poniżej dla określonego rodzaju repozytorium spróbuj skondensować kod, który demonstruje problem tak bardzo, jak to możliwe. Spróbuj wyeliminować lub zminimalizować zależności, wymagane nagłówki i biblioteki. Ogranicz używane opcje kompilatora i definicje preprocesora, jeśli to możliwe.

Poniżej przedstawiono instrukcje generowania różnych rodzajów repozytoriów do raportowania różnych rodzajów problemów.

Wstępnie przetworzone repozytorium

Przetworzone wstępnie odtworzenie jest pojedynczym plikiem źródłowym, który demonstruje problem. Jest on generowany na podstawie danych wyjściowych preprocesora języka C. Aby go utworzyć, użyj opcji /P kompilatora w oryginalnym pliku źródłowym odtworzenia. Ta opcja powoduje, że dołączone nagłówki usuwają zależności z innymi plikami źródłowymi i nagłówkowymi. Opcja rozwiązuje również makra, #ifdef warunkowe i inne polecenia preprocesora, które mogą zależeć od środowiska lokalnego.

Uwaga

Wstępnie przetworzone repozytorium nie są tak przydatne w przypadku problemów, które mogą być wynikiem usterek w naszej standardowej implementacji biblioteki, ponieważ często chcemy zastąpić naszą najnowszą implementację w toku, aby sprawdzić, czy problem został już rozwiązany. W takim przypadku nie przetwarzaj wstępnie odtworzenia i jeśli nie możesz zmniejszyć problemu do pojedynczego pliku źródłowego, spakuj kod do pliku .zip lub podobnego lub rozważ ponowne odtworzenie projektu IDE. Aby uzyskać więcej informacji, zobacz Inne repozytorium.

Aby wstępnie przetworzyć plik kodu źródłowego

  1. Przechwyć argumenty wiersza polecenia używane do kompilowania odtworzenia, zgodnie z opisem w sekcji Aby zgłosić zawartość wiersza polecenia.

  2. Otwórz wiersz polecenia dla deweloperów zgodny z wersją programu Visual Studio i architekturą konfiguracji używaną do kompilowania projektu.

  3. Przejdź do katalogu zawierającego projekt odtworzenia.

  4. W oknie konsoli wiersza polecenia dewelopera wprowadź polecenie cl /P argumenty filename.cpp. W przypadku argumentów użyj listy argumentów przechwyconych powyżej. filename.cpp jest nazwą pliku źródłowego odtworzenia. To polecenie replikuje wiersz polecenia użyty do odtworzenia, ale zatrzymuje kompilację po przekazaniu preprocesora. Następnie zapisuje wstępnie przetworzony kod źródłowy do pliku.i.

Jeśli wstępnie przetwarzasz plik kodu źródłowego C++/CX lub używasz funkcji modułów języka C++, wymagane są dalsze kroki. Aby uzyskać więcej informacji, zobacz poniższe sekcje.

Po wygenerowaniu wstępnie przetworzonego pliku dobrym pomysłem jest upewnienie się, że problem nadal występuje podczas kompilowania wstępnie przetworzonego pliku.

Aby potwierdzić, że wstępnie przetworzony plik nadal przesłał błąd

  1. W oknie konsoli wiersza polecenia dewelopera wprowadź polecenie cl argumenty /TP nazwa pliku.i, aby poinformować cl.exe skompilować wstępnie przetworzony plik jako plik źródłowy C++. Argumenty są tymi samymi argumentami przechwyconymi powyżej, ale z usuniętymi argumentami /D i /I . Dzieje się tak, ponieważ zostały one już uwzględnione w wstępnie przetworzonym pliku. nazwa pliku.i jest nazwą wstępnie przetworzonego pliku.

  2. Upewnij się, że problem został odtworzony.

Na koniec dołącz wstępnie przetworzoną nazwę pliku do odtworzenia.i do raportu.

Wstępnie przetworzone repozytorium kodu C++/CX WinRT/UWP

Jeśli używasz języka C++/CX do kompilowania pliku wykonywalnego, należy wykonać kilka dodatkowych kroków niezbędnych do utworzenia i zweryfikowania wstępnie przetworzonego odtworzenia.

Aby wstępnie przetworzyć kod źródłowy C++/CX

  1. Utwórz wstępnie przetworzony plik źródłowy zgodnie z opisem w sekcji Aby wstępnie przetworzyć plik kodu źródłowego.

  2. Przeszukaj wygenerowany plik nazwa_pliku.i pod kątem dyrektyw #using .

  3. Utwórz listę wszystkich przywołynych plików. Pozostaw wszystkie pliki systemu Windows*.winmd, pliki platform.winmd i mscorlib.dll.

Aby przygotować się do sprawdzenia, czy wstępnie przetworzony plik nadal odtwarza problem,

  1. Utwórz nowy katalog dla wstępnie przetworzonego pliku i skopiuj go do nowego katalogu.

  2. Skopiuj pliki winmd z listy #using do nowego katalogu.

  3. Utwórz pusty plik vccorlib.h w nowym katalogu.

  4. Edytuj wstępnie przetworzony plik, aby usunąć wszystkie dyrektywy #using dla mscorlib.dll.

  5. Edytuj wstępnie przetworzony plik, aby zmienić wszystkie ścieżki bezwzględne tylko na najgorętsze nazwy plików skopiowanych plików winmd.

Upewnij się, że wstępnie przetworzony plik nadal odtwarza problem, jak pokazano powyżej.

Wstępnie przetworzone repozytorium modułów języka C++

Jeśli używasz funkcji Modules kompilatora języka C++, istnieją różne kroki wymagane do utworzenia i zweryfikowania wstępnie przetworzonego odtworzenia.

Aby wstępnie przetworzyć plik kodu źródłowego, który używa modułu

  1. Przechwyć argumenty wiersza polecenia używane do kompilowania odtworzenia, zgodnie z opisem w sekcji Aby zgłosić zawartość wiersza polecenia.

  2. Otwórz wiersz polecenia dla deweloperów zgodny z wersją programu Visual Studio i architekturą konfiguracji używaną do kompilowania projektu.

  3. Przejdź do katalogu zawierającego projekt odtworzenia.

  4. W oknie konsoli wiersza polecenia dewelopera wprowadź polecenie cl /P argumenty filename.cpp. Argumenty są argumentami przechwytywanymi powyżej, a filename.cpp jest nazwą pliku źródłowego, który używa modułu.

  5. Przejdź do katalogu zawierającego projekt odtworzenia, który skompilował interfejs modułu (dane wyjściowe ifc).

  6. Przechwyć argumenty wiersza polecenia używane do kompilowania interfejsu modułu.

  7. W oknie konsoli wiersza polecenia dewelopera wprowadź polecenie cl /P arguments modulename.ixx. Argumenty są argumentami przechwytywanymi powyżej, a modulename.ixx jest nazwą pliku tworzącego interfejs modułu.

Po wygenerowaniu wstępnie przetworzonych plików dobrym pomysłem jest upewnienie się, że problem nadal występuje podczas używania wstępnie przetworzonego pliku.

Aby potwierdzić, że wstępnie przetworzony plik nadal przesłał błąd

  1. W oknie konsoli dewelopera wróć do katalogu zawierającego projekt odtworzenia.

  2. Wprowadź polecenie cl argumenty /TP nazwa pliku.i jak powyżej, aby skompilować wstępnie przetworzony plik tak, jakby był to plik źródłowy C++.

  3. Upewnij się, że problem jest nadal odtwarzany przez wstępnie przetworzony plik.

Na koniec dołącz wstępnie przetworzone pliki odtworzenia (nazwa pliku.i i i modulename.i) wraz z danymi wyjściowymi ifc do raportu.

Odtworzenie linku to zawartość katalogu wygenerowana przez konsolidatora określona przez zmienną środowiskową link_repro lub jako argument opcji konsolidatora /LINKREPRO. Zawiera artefakty kompilacji, które wspólnie demonstrują problem występujący w czasie połączenia. Przykłady obejmują awarię zaplecza z udziałem generowania kodu czasowego łącza (LTCG) lub awarii konsolidatora. Te artefakty kompilacji są potrzebne jako dane wejściowe konsolidatora, aby można było odtworzyć problem. Ponowne tworzenie linku można łatwo utworzyć przy użyciu tej zmiennej środowiskowej. Umożliwia wbudowane generowanie ponownego odtworzenia konsolidatora.

  1. Przechwyć argumenty wiersza polecenia używane do kompilowania odtworzenia, zgodnie z opisem w sekcji Aby zgłosić zawartość wiersza polecenia.

  2. Otwórz wiersz polecenia dla deweloperów zgodny z wersją programu Visual Studio i architekturą konfiguracji używaną do kompilowania projektu.

  3. W oknie konsoli wiersza polecenia dewelopera przejdź do katalogu zawierającego projekt odtworzenia.

  4. Wprowadź ciąg mkdir linkrepro , aby utworzyć katalog o nazwie linkrepro dla odtworzenia linku. Możesz użyć innej nazwy, aby przechwycić kolejne ponowne odtworzenie linku.

  5. Wprowadź zestaw poleceń link_repro=linkrepro , aby ustawić zmienną środowiskową link_repro na utworzony katalog. Jeśli kompilacja jest uruchamiana z innego katalogu, tak jak często w przypadku bardziej złożonych projektów, ustaw link_repro na pełną ścieżkę do katalogu ponownego tworzenia linku.

  6. Aby skompilować projekt odtworzenia w programie Visual Studio, w oknie konsoli wiersza polecenia dewelopera wprowadź polecenie devenv. Gwarantuje to, że wartość zmiennej środowiskowej link_repro jest widoczna dla programu Visual Studio. Aby skompilować projekt w wierszu polecenia, użyj argumentów wiersza polecenia przechwyconych powyżej, aby zduplikować kompilację odtworzenia.

  7. Skompiluj projekt odtworzenia i potwierdź, że wystąpił oczekiwany problem.

  8. Zamknij program Visual Studio, jeśli został użyty do wykonania kompilacji.

  9. W oknie konsoli wiersza polecenia dewelopera wprowadź zestaw poleceń link_repro= w celu wyczyszczenia zmiennej środowiskowej link_repro .

Na koniec spakuj odtworzenie, kompresując cały katalog linkrepro do pliku .zip lub podobnego i dołączając go do raportu.

Opcja konsolidatora /LINKREPRO ma taki sam efekt jak zmienna środowiskowa link_repro . Możesz użyć opcji /LINKREPROTARGET , aby określić nazwę do filtrowania dla wygenerowanego linku odtworzenia. Aby użyć /LINKREPROTARGET, należy również określić /OUT konsolidator opcji.

  1. Utwórz katalog do przechowywania ponownego odtworzenia linku. Odwołujemy się do pełnej ścieżki katalogu utworzonej jako ścieżka-katalog. Użyj podwójnych cudzysłowów wokół ścieżki, jeśli zawiera spacje.

  2. Dodaj polecenie /LINKREPRO:directory-path do wiersza polecenia konsolidatora. W programie Visual Studio otwórz okno dialogowe Strony właściwości dla projektu. Wybierz stronę właściwości wiersza polecenia konsolidatora>konfiguracji.> Następnie wprowadź opcję /LINKREPRO:directory-path w polu Opcje dodatkowe . Wybierz przycisk OK , aby zapisać zmiany.

  3. Skompiluj projekt odtworzenia i upewnij się, że wystąpił oczekiwany problem.

Na koniec spakuj ponownie plik odtworzenia, kompresując cały katalog ścieżki katalogowej do pliku .zip lub podobnego i dołączając go do raportu.

Inne repozytorium

Jeśli nie możesz zmniejszyć problemu do pojedynczego pliku źródłowego lub wstępnie przetworzonego odtworzenia, a problem nie wymaga odtworzenia linku, możemy zbadać projekt IDE. Wszystkie wskazówki dotyczące tworzenia dobrego odtworzenia nadal mają zastosowanie: Kod powinien być minimalny i samodzielny. Problem powinien wystąpić w naszych najnowszych narzędziach, a jeśli jest to istotne, nie powinien być widoczny w innych kompilatorach.

Utwórz odtworzenie jako minimalny projekt IDE, a następnie spakuj go, kompresując całą strukturę katalogów do pliku .zip lub podobnego i dołączając go do raportu.

Sposoby wysyłania raportu

Masz kilka dobrych sposobów, aby uzyskać raport do nas. Możesz użyć wbudowanego narzędzia do raportowania problemów programu Visual Studio lub strony Społeczności deweloperów programu Visual Studio. W dolnej części tej strony znajduje się również przycisk Opinii o produkcie. Wybór zależy od tego, czy chcesz używać wbudowanych narzędzi w środowisku IDE do przechwytywania zrzutów ekranu i organizowania raportu. Jeśli nie chcesz, możesz bezpośrednio użyć witryny społeczności deweloperów.

Uwaga

Niezależnie od sposobu przesyłania raportu firma Microsoft szanuje Twoją prywatność. Firma Microsoft jest zobowiązana do przestrzegania wszystkich przepisów i przepisów dotyczących prywatności danych. Aby uzyskać informacje o sposobie traktowania wysyłanych przez Ciebie danych, zobacz Zasady zachowania poufności informacji firmy Microsoft.

Korzystanie z narzędzia Zgłoś problem

Narzędzie Zgłoś problem w programie Visual Studio to sposób zgłaszania problemów użytkownikom programu Visual Studio za pomocą zaledwie kilku kliknięć. Zostanie wyświetlony prosty formularz, aby wysłać szczegółowe informacje o znalezionym problemie. Następnie możesz przesłać raport bez opuszczania środowiska IDE.

Raportowanie problemu za pomocą narzędzia Zgłoś problem jest łatwe i wygodne w środowisku IDE. Dostęp do niego można uzyskać na pasku tytułu, wybierając ikonę Wyślij opinię obok pola wyszukiwania Szybkie uruchamianie . Możesz też znaleźć go na pasku menu na stronie Pomoc>Wyślij opinię>Zgłoś problem.

Jeśli zdecydujesz się zgłosić problem, najpierw wyszukaj społeczność deweloperów pod kątem podobnych problemów. Jeśli twój problem został zgłoszony wcześniej, zagłosuj raport i dodaj komentarze z bardziej szczegółowymi danymi. Jeśli nie widzisz podobnego problemu, wybierz przycisk Zgłoś nowy problem w dolnej części okna dialogowego Opinie programu Visual Studio i wykonaj kroki, aby zgłosić problem.

Korzystanie ze stron społeczności deweloperów programu Visual Studio

Strony społeczności deweloperów programu Visual Studio to kolejny wygodny sposób zgłaszania problemów i znajdowania rozwiązań dla programu Visual Studio oraz kompilatora, narzędzi i bibliotek języka C++. Istnieją określone strony społeczności deweloperów dla programu Visual Studio, Visual Studio dla komputerów Mac, .NET, C++, Azure DevOps i Azure DevOps Server.

Pod kartami społeczności w górnej części każdej strony znajduje się pole wyszukiwania. Możesz go użyć do znajdowania wpisów, które zgłaszają problemy podobne do Twoich. Możesz znaleźć rozwiązanie lub inne przydatne informacje związane z problemem są już dostępne. Jeśli ktoś zgłosił ten sam problem wcześniej, zagłosuj i skomentuj ten raport, zamiast tworzyć nowy raport o problemach. Aby skomentować, głosować lub zgłosić nowy problem, może zostać wyświetlony monit o zalogowanie się na koncie programu Visual Studio. Przy pierwszym logowaniu musisz wyrazić zgodę na udzielenie aplikacji Developer Community dostępu do twojego profilu.

W przypadku problemów z kompilatorem języka C++, konsolidatorem i innymi narzędziami i bibliotekami najpierw wyszukaj stronę Społeczność deweloperów języka C++. Jeśli wyszukujesz problem i nie został jeszcze zgłoszony, wybierz przycisk Zgłoś problem obok pola wyszukiwania. Możesz dołączyć kod do odtworzenia i wiersz polecenia, zrzuty ekranu, linki do powiązanych dyskusji oraz wszelkie inne informacje, które uważasz za istotne i przydatne.

Napiwek

Informacje w początkowym raporcie Społeczności deweloperów będą zawsze publiczne. Jeśli jest to problem, zobacz następną sekcję dotyczącą raportów i prywatności.

Napiwek

W przypadku innych rodzajów problemów można znaleźć w programie Visual Studio, które nie są powiązane z zestawem narzędzi języka C++ (na przykład problemy z interfejsem użytkownika, przerwanymi funkcjami IDE lub ogólnymi awariami), użyj narzędzia Zgłoś problem w środowisku IDE. Jest to najlepszy wybór ze względu na możliwości zrzutu ekranu i możliwość rejestrowania akcji interfejsu użytkownika, które prowadzą do znalezionego problemu. Tego rodzaju błędy można również wyszukać w witrynie Społeczności deweloperów programu Visual Studio. Aby uzyskać więcej informacji, zobacz Jak zgłosić problem z programem Visual Studio.

Raporty i prywatność

Wszystkie informacje w raportach oraz wszelkie komentarze i odpowiedzi są domyślnie widoczne publicznie. Zwykle jest to korzyść, ponieważ pozwala całej społeczności zobaczyć problemy, rozwiązania i obejścia innych użytkowników. Jeśli jednak martwisz się o upublicznienie danych lub tożsamości, ze względów prywatności lub własności intelektualnej, masz opcje.

Jeśli martwisz się o ujawnienie tożsamości, utwórz nowe konto Microsoft, które nie ujawnia żadnych szczegółów dotyczących Ciebie. Użyj tego konta, aby utworzyć raport.

Nie umieszczaj niczego, co chcesz zachować prywatnie w tytule lub zawartości początkowego raportu, który jest publiczny. Zamiast tego załóżmy, że szczegóły będą wysyłane prywatnie w osobnym komentarzu. Aby upewnić się, że raport jest kierowany do odpowiednich osób, dołącz narzędzie cppcompiler na liście tematów raportu o problemach. Po utworzeniu raportu o problemach można teraz określić, kto może wyświetlać odpowiedzi i załączniki.

Aby utworzyć raport o problemie dla informacji prywatnych

  1. W utworzonym raporcie wybierz pozycję Dodaj komentarz , aby utworzyć prywatny opis problemu.

  2. W edytorze odpowiedzi użyj kontrolki listy rozwijanej poniżej przycisków Prześlij i Anuluj , aby określić odbiorców odpowiedzi. Tylko osoby, które określisz, mogą wyświetlać te prywatne odpowiedzi i wszystkie obrazy, linki lub kod, który do nich dołączysz. Wybierz pozycję Widoczne przez moderatorów i oryginalny plakat , aby ograniczyć widoczność pracowników firmy Microsoft i siebie.

  3. Dodaj opis i wszelkie inne informacje, obrazy i załączniki plików potrzebne do odtworzenia. Wybierz przycisk Prześlij, aby wysłać te informacje prywatnie.

    Istnieje limit 2 GB dołączonych plików i maksymalnie 10 plików. W przypadku większych przekazań zażądaj adresu URL przekazywania w swoim prywatnym komentarzu.

Wszystkie odpowiedzi w tym komentarzu mają taką samą określoną widoczność z ograniczeniami. To prawda, nawet jeśli kontrolka listy rozwijanej w odpowiedziach nie pokazuje prawidłowo stanu ograniczonej widoczności.

Aby zachować prywatność i zachować poufne informacje poza publicznym widokiem, należy zachować ostrożność. Zachowaj całą interakcję z firmą Microsoft, aby odpowiadać w ramach ograniczonego komentarza. Odpowiedzi na inne komentarze mogą spowodować przypadkowe ujawnienie poufnych informacji.

Jak zgłosić problem z dokumentacją języka C++

Problemy z usługą GitHub są używane do śledzenia problemów zgłaszanych w naszej dokumentacji. Teraz możesz tworzyć problemy z usługą GitHub bezpośrednio ze strony zawartości, co umożliwia interakcję w bogatszy sposób z autorami i zespołami produktów. Jeśli widzisz problem z dokumentem, nieprawidłowym przykładem kodu, mylącym wyjaśnieniem, krytycznym pominięciem, a nawet po prostu literówką, możesz łatwo poinformować nas o tym. Przewiń do dołu strony i wybierz pozycję Zaloguj się, aby przekazać opinię na temat dokumentacji. Jeśli jeszcze go nie masz, musisz utworzyć konto usługi GitHub. Gdy masz konto usługi GitHub, możesz zobaczyć wszystkie problemy z dokumentacją i ich stan. Otrzymasz również powiadomienia o wprowadzeniu zmian dotyczących zgłoszonego problemu. Aby uzyskać więcej informacji, zobacz wpis w blogu System opinii.

Podczas korzystania z przycisku opinii o dokumentacji utworzysz problem z dokumentacją w usłudze GitHub. Problem jest automatycznie wypełniany informacjami na temat strony, w której został utworzony problem. W ten sposób wiemy, gdzie znajduje się problem, więc nie edytuj tych informacji. Wystarczy dołączyć szczegóły dotyczące tego, co jest nie tak, a jeśli chcesz, sugerowana poprawka. Nasze dokumenty w języku C++ są oprogramowaniem open source, więc jeśli chcesz przesłać poprawkę samodzielnie, możesz. Aby uzyskać więcej informacji na temat współtworzenia naszej dokumentacji, zobacz nasz przewodnik dotyczący współtworzenia w witrynie GitHub.