Cara melaporkan masalah dengan toolset atau dokumentasi Microsoft C++

Jika Anda menemukan masalah di kompilator Microsoft C++ (MSVC), penaut, atau alat dan pustaka lainnya, kami ingin mengetahuinya. Ketika masalahnya ada pada dokumentasi kami, kami juga ingin mengetahuinya.

Cara melaporkan masalah toolset C++

Cara terbaik untuk memberi tahu kami tentang suatu masalah adalah dengan mengirimkan laporan kepada kami yang menyertakan deskripsi masalah yang Anda temukan. Laporan itu harus memiliki semua detail tentang bagaimana Anda membangun program Anda. Dan laporan tersebut juga harus menyertakan repro, kasus uji lengkap yang dapat kami gunakan untuk mereproduksi masalah pada komputer kami. Informasi ini memungkinkan kami memverifikasi dengan cepat bahwa masalah tersebut ada dalam kode kami dan tidak bersifat lokal di lingkungan Anda. Hal ini membantu kami menentukan apakah masalah tersebut mempengaruhi versi lain dari kompilator dan untuk mendiagnosis penyebabnya.

Pada bagian di bawah ini, Anda akan membaca tentang apa yang membuat laporan menjadi bagus. Kami menjelaskan cara membuat repro untuk jenis masalah yang Anda temukan dan cara mengirim laporan Anda ke tim produk. Laporan Anda penting bagi kami dan pengembang lain seperti Anda. Terima kasih telah membantu kami meningkatkan Microsoft C++!

Cara menyiapkan laporan Anda

Membuat laporan berkualitas tinggi merupakan hal yang penting, karena sulit bagi kami untuk mereproduksi masalah yang Anda temukan tanpa informasi yang lengkap. Semakin baik laporan Anda, semakin efektif kami dalam membuat ulang dan mendiagnosis masalahnya.

Setidaknya, laporan Anda harus berisi:

  • Informasi versi lengkap dari toolset yang Anda gunakan.

  • Baris perintah cl.exe lengkap yang digunakan untuk membangun kode Anda.

  • Penjelasan terperinci tentang masalah yang Anda temukan.

  • Repro: contoh kode sumber lengkap, sederhana, dan mandiri yang menunjukkan masalahnya.

Baca terus untuk mempelajari lebih lanjut tentang informasi spesifik yang kami butuhkan, di mana Anda dapat menemukannya, dan cara membuat repro yang baik.

Versi toolset

Kami membutuhkan informasi versi lengkap dan arsitektur target toolset yang menyebabkan masalah. Sehingga kami dapat menguji repro Anda pada toolset yang sama di komputer kami. Jika kami dapat mereproduksi masalah tersebut, informasi ini juga memberi kami titik awal untuk menyelidiki versi toolset lain mana yang memiliki masalah yang sama.

Untuk melaporkan versi lengkap kompilator Anda

  1. Buka Prompt Perintah Pengembang yang cocok dengan versi Visual Studio dan arsitektur konfigurasi yang digunakan untuk membangun proyek Anda. Misalnya, jika Anda membangun proyek menggunakan Visual Studio 2017 pada x64 untuk target x64, pilih Prompt Perintah Alat Asli x64 untuk VS 2017. Untuk informasi selengkapnya, lihat Pintasan prompt perintah pengembang.

  2. Di jendela konsol prompt perintah pengembang, masukkan perintah cl /Bv.

Outputnya akan terlihat seperti:

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

Salin dan tempel keseluruhan output ke dalam laporan Anda.

Baris perintah

Kami membutuhkan baris perintah yang sama persis, cl.exe dan seluruh argumennya, yang digunakan untuk membangun kode Anda. Sehingga kami dapat membangunnya dengan cara yang sama persis di komputer kami. Hal itu sangat penting karena mungkin masalah yang Anda temukan hanya muncul saat membangun dengan argumen tertentu atau kombinasi argumen tertentu.

Tempat terbaik untuk menemukan informasi ini adalah di build log segera setelah Anda mengalami masalah tersebut. Hal ini memastikan bahwa baris perintah berisi argumen yang sama persis yang mungkin berkontribusi pada masalah.

Untuk melaporkan isi baris perintah

  1. Temukan file CL.command.1.tlog, lalu buka file tersebut. Secara default, file ini terletak di folder Dokumen Anda, di \Visual Studio version\Projects\SolutionName\ProjectName\Configuration\ProjectName.tlog\CL.command.1.tlog, atau di folder Pengguna Anda, di \Source\Repos\SolutionName\ProjectName\Configuration\ProjectName.tlog\CL.command.1.tlog. File tersebut mungkin berada di lokasi yang berbeda jika Anda menggunakan sistem build lain, atau jika Anda telah mengubah lokasi default proyek Anda.

    Di dalam file ini, Anda akan menemukan nama-nama file kode sumber Anda, yang diikuti dengan argumen baris perintah yang digunakan untuk mengompilasinya, masing-masing pada baris terpisah.

  2. Temukan baris yang berisi nama file kode sumber tempat masalah terjadi. Baris di bawahnya berisi argumen perintah cl.exe yang sesuai.

Salin dan tempel seluruh baris perintah ke dalam laporan Anda.

Deskripsi masalah

Kami membutuhkan penjelasan terperinci tentang masalah yang Anda temukan. Agar kami dapat memverifikasi bahwa kami melihat efek yang sama pada komputer kami. Terkadang, berguna juga bagi kami untuk mengetahui apa yang ingin Anda capai dan apa yang Anda harapkan terjadi.

Deskripsi yang baik menyertakan pesan kesalahan yang sama persis yang diberikan oleh toolset, atau perilaku runtime yang Anda lihat. Kami memerlukan informasi ini untuk memverifikasi bahwa kami telah mereproduksi masalah dengan benar. Sertakan semua output kompilator, bukan hanya pesan kesalahan terakhir. Kami perlu melihat semua yang mengarah ke masalah yang Anda laporkan. Jika Anda dapat menduplikasi masalah dengan menggunakan kompilator baris perintah, output kompilator tersebut lebih disukai. IDE dan sistem build lainnya dapat memfilter pesan kesalahan yang Anda lihat, atau hanya mengambil baris pertama pesan kesalahan.

Jika masalahnya adalah kompilator menerima kode yang tidak valid dan tidak menghasilkan diagnostik, sertakan itu dalam laporan Anda.

Untuk melaporkan masalah perilaku runtime, sertakan salinan persis dari apa yang dicetak oleh program dan apa yang ingin Anda lihat. Idealnya, Anda akan menyematkannya dalam pernyataan output itu sendiri, misalnya, printf("This should be 5: %d\n", actual_result);. Jika program Anda mengalami crash atau macet, sebutkan hal itu juga.

Tambahkan detail lain yang dapat membantu kami mendiagnosis masalah yang Anda temukan, seperti solusi apa pun yang telah Anda ketahui. Cobalah untuk tidak mengulangi informasi yang ditemukan di tempat lain dalam laporan Anda.

Repro

Repro adalah contoh kode sumber mandiri yang lengkap. Sesuai namanya, Repro secara reproduktif menunjukkan masalah yang telah Anda temukan. Kami memerlukan repro agar kami dapat mereproduksi kesalahan pada komputer kami. Kode itu sendiri harus cukup untuk membuat executable dasar yang dikompilasi dan dijalankan. Atau, yang akan dikompilasi dan dijalankan, jika bukan karena masalah yang Anda temukan. Repro bukan merupakan cuplikan kode. Repro harus memiliki fungsi dan kelas yang lengkap, dan berisi semua arahan #include yang diperlukan, bahkan untuk header standar.

Hal yang membuat sebuah repro bagus

Repro yang bagus adalah:

  • Minimal. Repro harus berukuran sekecil mungkin, namun masih menunjukkan dengan tepat masalah yang Anda temukan. Repro tidak perlu kompleks atau realistis. Mereka hanya perlu menunjukkan kode yang sesuai dengan Standar, atau implementasi kompilator yang didokumentasikan. Untuk diagnostik yang hilang, repro Anda harus menunjukkan kode yang tidak sesuai. Repro yang sederhana dan tepat yang hanya berisi kode yang cukup untuk menunjukkan masalah adalah yang terbaik. Jika Anda dapat menghilangkan atau menyederhanakan kode dan tetap sesuai, serta membiarkan masalah tidak berubah, maka lakukanlah. Anda tidak perlu menyertakan contoh tandingan dari kode yang berfungsi.

  • Mandiri. Repro harus menghindari dependensi yang tidak perlu. Jika Anda dapat mereproduksi masalah tanpa pustaka pihak ketiga, lakukanlah. Jika Anda dapat mereproduksi masalah tanpa kode pustaka apa pun selain pernyataan output sederhana (misalnya, puts("this shouldn't compile");, std::cout << value;, dan printf("%d\n", value);), lakukanlah. Merupakan hal yang ideal jika contoh dapat diringkas menjadi satu file kode sumber, tanpa mengacu pada header pengguna mana pun. Mengurangi jumlah kode yang harus kami pertimbangkan sebagai kemungkinan kontributor terhadap masalah akan sangat membantu kami.

  • Terhadap versi kompilator terbaru. Bila memungkinkan, repro harus menggunakan pembaruan terbaru ke versi terbaru toolset. Atau, gunakan versi pralisi terbaru dari pembaruan berikutnya atau rilis utama berikutnya. Masalah yang mungkin Anda temukan di versi lama toolset sering kali telah diperbaiki di versi yang lebih baru. Perbaikan diterapkan ke versi lama hanya dalam keadaan yang luar biasa.

  • Diperiksa terhadap kompilator lain jika relevan. Jika memungkinkan, repro yang melibatkan kode C++ portabel harus memverifikasi perilaku terhadap kompilator lain. Pada akhirnya, standar C++ menentukan kebenaran program, dan tidak ada kompilator yang sempurna. Namun, ketika Clang dan GCC menerima kode Anda tanpa diagnostik, sementara MSVC tidak, Anda mungkin telah menemukan bug di kompilator kami. (Kemungkinan lain termasuk perbedaan dalam perilaku Unix dan Windows, atau tingkat implementasi standar C++ yang berbeda, dan sebagainya.) Ketika semua kompilator menolak kode Anda, maka kemungkinan kode Anda salah. Melihat berbagai pesan kesalahan yang berbeda dapat membantu Anda mendiagnosis masalah sendiri.

    Anda dapat menemukan daftar kompilator untuk menguji kode Anda di Kompilator C++ online di situs web ISO C++, atau Daftar Kompilator C++ Online yang dikuratori di GitHub. Beberapa contoh yang spesifik termasuk Wandbox dan Compiler Explorer.

    Catatan

    Situs web kompilator online tidak berafiliasi dengan Microsoft. Banyak situs web kompilator online yang dijalankan sebagai proyek pribadi. Beberapa situs mungkin tidak tersedia ketika Anda membaca ini, tetapi pencarian akan menemukan situs lain yang dapat Anda gunakan.

Masalah di kompilator, penaut, dan di pustaka, cenderung muncul dengan cara tertentu. Jenis masalah yang Anda temukan akan menentukan jenis repro apa yang harus Anda sertakan dalam laporan Anda. Tanpa repro yang tepat, kami tidak memiliki apa pun untuk diselidiki. Berikut adalah beberapa jenis masalah yang mungkin Anda lihat. Kami menyertakan petunjuk tentang cara menghasilkan jenis repro yang harus Anda gunakan untuk melaporkan setiap jenis masalah.

Gangguan Frontend (parser)

Gangguan frontend terjadi selama fase penguraian kompilator. Biasanya, kompilator mengeluarkan Kesalahan Fatal C1001, dan mereferensikan file kode sumber serta nomor baris tempat kesalahan terjadi. Di sini, file bernama msc1.cpp juga sering disebutkan, tetapi Anda dapat mengabaikan detail ini.

Untuk gangguan seperti ini, berikan Repro yang telah diproses sebelumnya.

Berikut adalah contoh output kompilator untuk gangguan seperti ini:

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

Gangguan backend (pembuatan kode)

Gangguan backend terjadi selama fase pembuatan kode kompilator. Biasanya, kompilator mengeluarkan Kesalahan Fatal C1001, dan mungkin tidak mereferensikan file kode sumber dan nomor baris yang terkait dengan masalah. Di sini, file compiler\utc\src\p2\main.c sering disebutkan, tetapi Anda dapat mengabaikan detail ini.

Untuk gangguan seperti ini, berikan Repro tautan jika Anda menggunakan Pembuatan Kode Waktu Tautan (LTCG), yang diaktifkan oleh argumen baris perintah /GL ke cl.exe. Jika tidak, berikan Repro yang telah diproses sebelumnya.

Berikut adalah contoh output kompilator untuk gangguan backend di mana LTCG tidak digunakan. Jika kompilator output Anda terlihat seperti ini, Anda harus memberikan Repro yang telah diproses sebelumnya.

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

Jika baris yang dimulai dengan INTERNAL COMPILER ERROR menyebutkan link.exe, alih-alih cl.exe, berarti LTCG telah diaktifkan. Dalam kasus ini, berikan Repro tautan. Jika tidak jelas apakah LTCG diaktifkan dari pesan kesalahan kompilator, periksa argumen baris perintah. Anda menyalinnya dari log build Anda, di langkah sebelumnya untuk argumen baris perintah /GL.

Gangguan penaut

Gangguan penaut terjadi selama fase penautan, setelah kompilator berjalan. Biasanya, penaut akan mengeluarkan Kesalahan Alat Penaut LNK1000.

Catatan

Jika output menyebutkan C1001 atau melibatkan Pembuatan Kode Waktu Tautan, lihat Gangguan Backend (pembuatan kode).

Untuk gangguan seperti ini, berikanRepro tautan.

Berikut adalah contoh output kompilator untuk gangguan seperti ini:

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

Jika penautan inkremental diaktifkan, dan gangguan hanya terjadi setelah tautan awal berhasil, yaitu, hanya setelah tautan lengkap pertama yang menjadi dasar tautan inkremental berikutnya, juga menyediakan salinan file objek (.obj) dan pustaka (.lib) yang sesuai dengan file sumber yang dimodifikasi setelah tautan awal selesai.

Pembuatan kode yang buruk

Pembuatan kode yang buruk jarang terjadi. Hal itu terjadi saat kompilator secara keliru menghasilkan kode yang salah yang menyebabkan aplikasi Anda mengalami gangguan saat runtime. Sebaliknya, kompilator harus menghasilkan kode yang benar atau mendeteksi masalah saat waktu kompilasi. Jika Anda yakin bahwa masalah yang Anda temukan menghasilkan pembuatan kode yang buruk, perlakukan laporan Anda dengan cara yang sama seperti Gangguan backend (pembuatan kode).

Untuk gangguan seperti ini, berikan Repro tautan jika Anda menggunakan argumen baris perintah /GL ke cl.exe. Jika tidak, berikan Repro yang telah diproses sebelumnya.

Cara membuat repro

Untuk membantu kami melacak sumber masalah, repro yang baik sangatlah penting. Sebelum Anda melakukan salah satu langkah yang diuraikan di bawah ini untuk repro jenis tertentu, cobalah untuk menyingkat kode yang menunjukkan masalah sebanyak mungkin. Cobalah untuk menghilangkan atau meminimalkan dependensi, header yang dibutuhkan, dan pustaka. Jika memungkinkan, batasi opsi kompilator dan definisi praprosesor yang digunakan.

Di bawah ini adalah instruksi untuk membuat berbagai jenis repro yang akan Anda gunakan untuk melaporkan berbagai jenis masalah.

Repro yang telah diproses sebelumnya

Repro yang telah diproses sebelumnya adalah file sumber tunggal yang menunjukkan sebuah masalah. Repro tersebut dihasilkan dari output praprosesor C. Untuk membuatnya, gunakan opsi kompilator /P pada file sumber repro asli. Opsi ini menyejajarkan header yang disertakan untuk menghilangkan dependensi pada file sumber dan header tambahan. Opsi ini juga menyelesaikan makro, kondisional #ifdef, dan perintah praprosesor lain yang dapat bergantung pada lingkungan lokal Anda.

Catatan

Repro yang telah diproses sebelumnya tidak terlalu berguna untuk masalah yang mungkin merupakan hasil bug dalam implementasi pustaka standar kami, karena kami ingin sering mengganti implementasi terbaru yang sedang berlangsung untuk melihat apakah kami telah memperbaiki masalahnya. Dalam hal ini, jangan melakukan praproses repro, dan jika Anda tidak dapat mengurangi masalah menjadi sebuah file sumber tunggal, kemas kode Anda ke dalam file .zip atau sejenisnya, atau pertimbangkan untuk menggunakan repro proyek IDE. Untuk informasi selengkapnya, lihat Repro lainnya.

Untuk melakukan praprores file kode sumber

  1. Ambil argumen baris perintah yang digunakan untuk membuat repro Anda, seperti yang dijelaskan di Untuk melaporkan konten baris perintah.

  2. Buka Prompt Perintah Pengembang yang cocok dengan versi Visual Studio dan arsitektur konfigurasi yang digunakan untuk membangun proyek Anda.

  3. Ubah ke direktori yang berisi proyek repro Anda.

  4. Di jendela konsol prompt perintah pengembang, masukkan perintah cl /Pargumentsfilename.cpp. Untuk argumen, gunakan daftar argumen yang telah Anda ambil di atas. filename.cpp adalah nama file sumber repro Anda. Perintah ini mereplikasi baris perintah yang Anda gunakan untuk repro, namun menghentikan kompilasi setelah lulus praprosesor. Kemudian, perintah itu menuliskan kode sumber yang telah diproses sebelumnya ke filename.i.

Jika Anda sedang melakukan prapemrosesan file kode sumber C++/CX, atau Anda menggunakan fitur Modul C++, dibutuhkan beberapa langkah tambahan. Untuk informasi selengkapnya, lihat bagian di bawah.

Setelah Anda membuat file yang telah diproses sebelumnya, sebaiknya Anda memastikan bahwa masalah masih terjadi saat Anda mengompilasi file yang telah diproses sebelumnya.

Untuk mengonfirmasi bahwa file yang telah diproses sebelumnya masih mengulangi kesalahan

  1. Di jendela konsol prompt perintah pengembang, masukkan perintah clarguments/TPfilename.i untuk memerintahkan cl.exe untuk mengompilasi file yang telah diproses sebelumnya sebagai file sumber C++. Arguments adalah argumen yang sama dengan yang diambil di atas, tetapi dengan argumen /D dan /I dihapus. Hal itu karena mereka telah disertakan dalam file yang telah diproses sebelumnya. filename.i adalah nama file Anda yang telah diproses sebelumnya.

  2. Konfirmasikan bahwa masalahnya telah direproduksi.

Terakhir, lampirkan repro filename.i yang telah diproses sebelumnya ke laporan Anda.

Repro kode C++/CX WinRT/UWP yang telah diproses sebelumnya

Jika Anda menggunakan C++/CX untuk membuat executable Anda, ada beberapa langkah tambahan yang diperlukan untuk membuat dan memvalidasi repro yang telah diproses sebelumnya.

Untuk melakukan praproses kode sumber C++/CX

  1. Buat file sumber yang telah diproses sebelumnya seperti yang dijelaskan dalam Untuk melakukan praproses file kode sumber.

  2. Cari file filename.i yang dihasilkan untuk arahan #using.

  3. Buat daftar tentang semua file yang direferensikan. Tinggalkan file Windows*.winmd, file platform.winmd, dan mscorlib.dll.

Untuk bersiap memvalidasi bahwa file yang telah diproses sebelumnya masih mereproduksi masalah,

  1. Buat direktori baru untuk file yang telah diproses sebelumnya dan salin file tersebut ke direktori baru.

  2. Salin file .winmd dari daftar #using Anda ke direktori baru.

  3. Buat file vccorlib.h kosong di direktori baru.

  4. Edit file yang telah diproses sebelumnya untuk menghapus arahan #using untuk mscorlib.dll.

  5. Edit file yang telah diproses sebelumnya untuk mengubah jalur absolut apa pun menjadi hanya nama file kosong untuk file .winmd yang disalin.

Konfirmasikan bahwa file yang telah diproses sebelumnya masih mereproduksi masalah, sama seperti di atas.

Repro Modul C++ yang telah diproses sebelumnya

Jika Anda menggunakan fitur Modul kompilator C++, ada beberapa langkah berbeda yang diperlukan untuk membuat dan memvalidasi repro yang telah diproses sebelumnya.

Untuk melakukan praproses file kode sumber yang menggunakan modul

  1. Ambil argumen baris perintah yang digunakan untuk membuat repro Anda, seperti yang dijelaskan di Untuk melaporkan konten baris perintah.

  2. Buka Prompt Perintah Pengembang yang cocok dengan versi Visual Studio dan arsitektur konfigurasi yang digunakan untuk membangun proyek Anda.

  3. Ubah ke direktori yang berisi proyek repro Anda.

  4. Di jendela konsol prompt perintah pengembang, masukkan perintah cl /Pargumentsfilename.cpp. Arguments adalah argumen yang diambil di atas, dan filename.cpp adalah nama file sumber yang menggunakan modul.

  5. Ubah ke direktori yang berisi proyek repro yang membuat antarmuka modul (output .ifc).

  6. Ambil argumen baris perintah yang digunakan untuk membuat antarmuka modul Anda.

  7. Di jendela konsol prompt perintah pengembang, masukkan perintah cl /Pargumentsmodulename.ixx. Arguments adalah argumen yang diambil di atas, dan modulename.ixx adalah nama file yang membuat antarmuka modul.

Setelah Anda membuat file yang telah diproses sebelumnya, sebaiknya Anda memastikan bahwa masalah masih terjadi saat Anda menggunakan file tersebut.

Untuk mengonfirmasi bahwa file yang telah diproses sebelumnya masih mengulangi kesalahan

  1. Di jendela konsol pengembang, ubah kembali ke direktori yang berisi proyek repro Anda.

  2. Masukkan perintah clarguments/TPfilename.i seperti di atas untuk mengompilasi file yang telah diproses sebelumnya seolah-olah file itu adalah file sumber C++.

  3. Konfirmasikan bahwa masalah masih direproduksi oleh file yang telah diproses sebelumnya.

Terakhir, lampirkan file repro yang telah diproses sebelumnya (filename.i dan modulename.i) bersama dengan output .ifc ke laporan Anda.

Repro tautan adalah konten direktori yang dihasilkan oleh penaut, yang ditentukan oleh variabel lingkungan link_repro, atau sebagai argumen untuk opsi penaut /LINKREPRO. Hal ini berisi artefak build yang secara kolektif menunjukkan masalah yang terjadi pada waktu tautan. Contohnya termasuk gangguan backend yang melibatkan Pembuatan Kode Waktu Tautan (LTCG), atau gangguan penaut. Artefak build ini adalah artefak yang dibutuhkan sebagai input penaut agar masalah dapat direproduksi. Repro tautan dapat dibuat dengan mudah dengan menggunakan variabel lingkungan ini. Hal ini mengaktifkan kemampuan pembuatan repro bawaan penaut.

  1. Ambil argumen baris perintah yang digunakan untuk membuat repro Anda, seperti yang dijelaskan di Untuk melaporkan konten baris perintah.

  2. Buka Prompt Perintah Pengembang yang cocok dengan versi Visual Studio dan arsitektur konfigurasi yang digunakan untuk membangun proyek Anda.

  3. Di jendela konsol prompt perintah pengembang, ubah ke direktori yang berisi proyek repro Anda.

  4. Masukkan mkdir linkrepro untuk membuat direktori bernama linkrepro untuk repro tautan. Anda dapat menggunakan nama yang berbeda untuk mengambil repro tautan lain.

  5. Masukkan perintah set link_repro=linkrepro untuk mengatur variabel lingkungan link_repro ke direktori yang Anda buat. Jika build Anda dijalankan dari direktori yang berbeda, seperti yang sering terjadi pada proyek yang lebih kompleks, maka atur link_repro ke direktori repro tautan Anda, alih-alih ke jalur lengkap.

  6. Untuk membuat proyek repro di Visual Studio, masukkan perintah devenv di jendela konsol prompt perintah pengembang. Hal ini memastikan bahwa nilai variabel lingkungan link_repro terlihat oleh Visual Studio. Untuk membangun proyek di baris perintah, gunakan argumen baris perintah yang diambil di atas untuk menduplikasi build repro.

  7. Buat proyek repro Anda, dan konfirmasikan bahwa masalah yang diperkirakan telah terjadi.

  8. Tutup Visual Studio, jika Anda menggunakannya untuk melakukan build.

  9. Di jendela konsol prompt perintah pengembang, masukkan perintah set link_repro= untuk menghapus variabel lingkungan link_repro.

Terakhir, kemas repro dengan mengompresi seluruh direktori linkrepro menjadi file .zip atau sejenisnya, lalu lampirkan ke laporan Anda.

Opsi penaut /LINKREPRO memiliki efek yang sama dengan variabel lingkungan link_repro. Anda dapat menggunakan opsi /LINKREPROTARGET untuk menentukan nama yang akan difilter untuk repro tautan yang dihasilkan. Untuk menggunakan /LINKREPROTARGET, Anda juga harus menentukan opsi penaut /OUT.

  1. Buat direktori untuk menampung repro tautan. Kami akan menyebut jalur direktori lengkap yang Anda buat sebagai directory-path. Gunakan tanda kutip ganda di sekitar jalur jika menyertakan spasi.

  2. Tambahkan perintah /LINKREPRO:directory-path ke baris perintah penaut. Di Visual Studio, buka dialog Halaman Properti untuk proyek Anda. Pilih halaman properti Properti Konfigurasi>Penaut>Baris Perintah. Kemudian, masukkan opsi /LINKREPRO:directory-path di kotak Opsi Tambahan. Pilih OK untuk menyimpan perubahan.

  3. Buat proyek repro Anda, dan konfirmasikan bahwa masalah yang diperkirakan telah terjadi.

Terakhir, kemas repro dengan mengompresi seluruh direktori repro tautan directory-path menjadi file .zip atau sejenisnya, lalu lampirkan ke laporan Anda.

Repro lainnya

Jika Anda tidak dapat mengurangi masalah menjadi satu file sumber atau repro yang telah diproses sebelumnya, dan masalahnya tidak membutuhkan repro tautan, kami dapat menyelidiki proyek IDE. Semua panduan tentang cara membuat repro yang baik masih berlaku: Kode harus minimal dan mandiri. Masalah harus terjadi di alat terbaru kami, dan jika relevan, seharusnya tidak terlihat di kompilator lain.

Buat repro Anda sebagai proyek IDE minimal, lalu kemas dengan mengompresi seluruh struktur direktori menjadi file .zip atau sejenisnya dan lampirkan ke laporan Anda.

Cara mengirim laporan Anda

Anda memiliki beberapa cara untuk mengirim laporan Anda kepada kami. Anda dapat menggunakan alat pelaporan masalah bawaan Visual Studio atau halaman Komunitas Pengembang Visual Studio . Ada juga tombol Umpan balik produk di bagian bawah halaman ini. Pilihannya tergantung pada apakah Anda ingin menggunakan alat bawaan IDE untuk mengambil screenshot dan mengatur laporan Anda. Jika Anda memilih untuk tidak melakukannya, Anda dapat menggunakan situs web Komunitas Pengembang secara langsung.

Catatan

Terlepas dari cara Anda mengirimkan laporan, Microsoft menghormati privasi Anda. Microsoft berkomitmen untuk mematuhi semua undang-undang dan peraturan privasi data. Untuk informasi tentang bagaimana kami memperlakukan data yang Anda kirimkan, lihat Pernyataan Privasi Microsoft.

Gunakan alat Laporkan Masalah

Alat Laporkan Masalah di Visual Studio merupakan cara bagi pengguna Visual Studio untuk melaporkan masalah hanya dengan beberapa klik. Alat tersebut akan memunculkan sebuah formulir sederhana untuk mengirim informasi terperinci tantang masalah yang Anda temukan. Kemudian, Anda dapat mengirimkan laporan tanpa harus meninggalkan IDE.

Melaporkan masalah Anda melalui alat Laporkan Masalah merupakan hal yang mudah dan nyaman dari IDE. Anda dapat mengaksesnya dari bilah judul dengan memilih ikon Kirim Umpan Balik di samping kotak pencarian Pengaktifan Cepat. Atau, Anda dapat menemukannya pada bilah menu, di Bantuan>Kirim Umpan Balik>Laporkan Masalah.

Saat Anda memilih untuk melaporkan sebuah masalah, pertama-tama, telusuri Komunitas Pengembang untuk masalah serupa. Jika masalah Anda telah dilaporkan sebelumnya, setujui laporan tersebut dan tambahkan komentar dengan detail tambahan. Jika Anda tidak melihat masalah serupa, pilih tombol Laporkan masalah baru di bagian bawah dialog Umpan Balik Visual Studio dan ikuti langkah-langkah untuk melaporkan masalah Anda.

Gunakan halaman Komunitas Pengembang Visual Studio

Halaman Komunitas Pengembang Visual Studio adalah cara mudah lainnya untuk melaporkan masalah dan menemukan solusi untuk Visual Studio dan kompilator, alat, serta pustaka C++. Terdapat halaman Komunitas Pengembang khusus untuk Visual Studio, Visual Studio untuk Mac, .NET, C++, Azure DevOps, dan Azure DevOps Server.

Di bawah tab komunitas, yaitu di dekat bagian atas setiap halaman, terdapat kotak pencarian. Anda dapat menggunakannya untuk menemukan postingan yang melaporkan masalah yang mirip dengan masalah Anda. Anda mungkin menemukan bahwa solusi atau informasi berguna lainnya yang terkait dengan masalah Anda sudah tersedia. jika seseorang telah melaporkan masalah yang sama, maka setujui dan komentari laporan tersebut, alih-alih membuat laporan masalah baru. Untuk berkomentar, memberikan suara, atau melaporkan masalah baru, Anda mungkin akan diminta untuk masuk ke akun Visual Studio Anda. Saat pertama kali masuk, Anda harus setuju untuk memberikan aplikasi Komunitas Pengembang akses ke profil Anda.

Untuk masalah dengan kompilator, penaut, alat lain, dan pustaka C++, cari halaman Komunitas Pengembang C++ terlebih dahulu. Jika Anda mencari masalah Anda, dan masalah itu belum pernah dilaporkan, pilih tombol Laporkan masalah di samping kotak pencarian. Anda dapat menyertakan kode repro dan baris perintah, screenshot, tautan terkait diskusi, dan informasi lain yang menurut Anda relevan dan berguna.

Tip

Untuk jenis masalah lain yang mungkin Anda temukan di Visual Studio yang tidak terkait dengan toolset C++ (Misalnya, masalah UI, fungsionalitas IDE rusak, atau gangguan umum), gunakan alat Laporkan Masalah di IDE. Hal ini adalah pilihan terbaik, karena kamampuan screenshot-nya dan kemampuannya untuk merekam tindakan UI yang mengarah ke masalah yang Anda temukan. Kesalahan seperti ini juga dapat dilihat di situs Komunitas Pengembang Visual Studio. Untuk informasi selengkapnya, lihat Cara melaporkan masalah dengan Visual Studio.

Laporan dan privasi

Semua informasi dalam laporan, komentar, dan balasan dapat dilihat oleh publik secara default. Biasanya, hal ini merupakan sebuah keuntungan, karena memungkinkan seluruh komunitas untuk melihat masalah, solusi, dan metode penyelesaian yang telah ditemukan pengguna lain. Namun, jika Anda khawatir tentang membuat data dan identitas Anda dapat dilihat publik, karena alasan privasi atau kekayaan intelektual, Anda memiliki opsi.

Jika Anda khawatir tentang pengungkapan identitas Anda, buat akun Microsoft baru yang tidak mengungkapkan detail apa pun tentang Anda. Gunakan akun ini untuk membuat laporan Anda.

Jangan memasukkan apa pun yang Anda ingin rahasiakan di judul atau isi laporan awal, yang bersifat publik. Sebagai gantinya, katakan bahwa Anda akan mengirimkan detail secara pribadi dalam komentar terpisah. Untuk memastikan bahwa laporan Anda diarahkan ke orang yang tepat, sertakan cppcompiler dalam daftar topik laporan masalah Anda. Setelah laporan masalah dibuat, sekarang anda dapat menentukan siapa yang dapat melihat balasan dan lampiran Anda.

Untuk membuat laporan masalah tentang informasi pribadi

  1. Dalam laporan yang Anda buat, pilih Tambahkan komentar untuk membuat deskripsi pribadi Anda tentang masalah tersebut.

  2. Di editor balasan, gunakan kontrol dropdown di bawah tombol Kirim dan Batalkan untuk menentukan audiens balasan Anda. Hanya orang yang Anda tentukan yang dapat melihat balasan pribadi ini serta gambar, tautan, atau kode apa pun yang Anda sertakan di dalamnya. Pilih Dapat dilihat oleh moderator dan pengirim asli untuk membatasi visibilitas kepada karyawan Microsoft dan diri Anda sendiri.

  3. Tambahkan deskripsi, informasi, gambar, dan lampiran file lainnya yang diperlukan untuk repro Anda. Pilih tombol Kirim untuk mengirimkan informasi ini secara pribadi.

    Ada batasan ukuran sebesar 2 GB untuk file yang dilampirkan dan maksimum 10 file. Untuk unggahan yang lebih besar, minta URL unggahan di komentar pribadi Anda.

Setiap balasan di bawah komentar ini memiliki visibilitas terbatas yang sama dengan yang Anda tentukan. Hal ini tetap berlaku bahkan jika kontrol dropdown pada balasan tidak menampilkan status visibilitas terbatas dengan benar.

Untuk menjaga privasi Anda dan menjaga agar informasi sensitif Anda tidak terlihat oleh publik, maka berhati-hatilah. Simpan semua interaksi dengan Microsoft untuk membalas di bawah komentar terbatas. Balasan ke komentar lain dapat menyebabkan Anda secara tidak sengaha mengungkapkan informasi sensitif.

Cara melaporkan masalah dokumentasi C++

Kami menggunakan masalah GitHub untuk melacak masalah yang dilaporkan dalam dokumentasi kami. Sekarang, Anda dapat membuat masalah GitHub secara langsung dari halaman konten, yang memungkinkan Anda berinteraksi dengan cara yang lebih beragam dengan penulis dan tim produk. Jika Anda melihat ada masalah dengan dokumen, sampel kode yang buruk, penjelasan yang membingungkan, penghapusan hal penting, atau bahkan hanya salah ketik, Anda dapat dengan mudah memberi tahu kami. Gulir ke bagian bawah halaman dan pilih Masuk untuk memberikan umpan balik dokumentasi. Anda harus membuat akun GitHub jika Anda belum memilikinya. Ketika Anda memiliki akun GitHub, Anda dapat melihat semua masalah dokumentasi dan statusnya. Anda juga mendapatkan pemberitahuan saat ada perubahan untuk masalah yang Anda laporkan. Untuk informasi selengkapnya, lihat entri blog Sistem Umpan Balik kami.

Anda membuat masalah dokumentasi di GitHub saat Anda menggunakan tombol umpan balik dokumentasi. Masalah tersebut secara otomatis diisi dengan beberapa informasi tentang halaman tempat Anda membuat masalah. Begitulah cara kami mengetahui di mana letak masalahnya, jadi jangan edit informasi ini. Cukup tambahkan detail tentang apa yang salah, dan jika Anda mau, perbaikan yang disarankan. Dokumen C++ kami adalah sumber terbuka. Jadi, jika Anda ingin mengirimkan perbaikan sendiri, Anda bisa melakukannya. Untuk informasi selengkapnya tentang bagaimana Anda dapat berkontribusi pada dokumentasi kami, lihat Panduan berkontribusi kami di GitHub.