Share via


Microsoft C++ araç takımı veya belgeleriyle ilgili bir sorunu bildirme

Microsoft C++ derleyicisinde (MSVC), bağlayıcıda veya diğer araçlarda ve kitaplıklarda sorun bulursanız, bunlar hakkında bilgi edinmek isteriz. Sorun belgelerimizde olduğunda, bunu da bilmek isteriz.

C++ araç takımı sorununu bildirme

Bir sorunu bize bildirmenin en iyi yolu, keşfettiğiniz sorunun açıklamasını içeren bir rapor göndermektir. Programınızın nasıl derlenmesiyle ilgili tüm ayrıntılara sahip olmalıdır. Ve sorunu kendi makinelerimizde yeniden oluşturmak için kullanabileceğimiz eksiksiz bir test çalışması olan bir yeniden oluşturma içermelidir. Bu bilgiler, sorunun kodumuzda mevcut olduğunu ve ortamınızda yerel olmadığını hızla doğrulamamıza olanak tanır. Derleyicinin diğer sürümlerini etkileyip etkilemediğini belirlememize ve nedenini tanılamamıza yardımcı olur.

Aşağıdaki bölümlerde, iyi bir rapor oluşturan şey hakkında bilgi edineceksiniz. Bulduğunuz sorunun türü için bir yeniden oluşturma oluşturmayı ve raporunuzu ürün ekibine göndermeyi açıklıyoruz. Raporlarınız bizim ve sizin gibi diğer geliştiriciler için önemlidir. Microsoft C++ geliştirmemize yardımcı olduğunuz için teşekkür ederiz!

Raporunuzu hazırlama

Bulduğunuz sorunu tam bilgi olmadan yeniden oluşturmamız zor olduğundan, yüksek kaliteli bir rapor oluşturmak önemlidir. Raporunuz ne kadar iyi olursa sorunu o kadar etkili bir şekilde yeniden oluşturabilir ve tanılayabiliriz.

En azından raporunuz şunları içermelidir:

  • Kullandığınız araç takımının tam sürüm bilgileri.

  • Kodunuzu oluşturmak için kullanılan tam cl.exe komut satırı.

  • Bulduğunuz sorunun ayrıntılı açıklaması.

  • Yeniden oluşturma: Sorunu gösteren eksiksiz, basitleştirilmiş, kendi içinde bulunan bir kaynak kodu örneği.

İhtiyacımız olan belirli bilgiler ve bunları nerede bulabileceğiniz ve iyi bir yeniden oluşturma hakkında daha fazla bilgi edinmek için okumaya devam edin.

Araç takımı sürümü

Tam sürüm bilgilerine ve soruna neden olan araç takımının hedef mimarisine ihtiyacımız var. Bu sayede tekrarınızı makinelerimizde aynı araç takımına karşı test edebiliriz. Sorunu yeniden oluşturabiliyorsak, bu bilgiler araç takımının diğer hangi sürümlerinin aynı sorunla karşılaşabileceğini araştırmak için bir başlangıç noktası da sağlar.

Derleyicinizin tam sürümünü raporlamak için

  1. Projenizi oluşturmak için kullanılan Visual Studio sürümü ve yapılandırma mimarisiyle eşleşen Geliştirici Komut İstemi'ni açın. Örneğin, x64 hedefleri için x64 üzerinde Visual Studio 2017 kullanarak derlediyseniz VS 2017 için x64 Yerel Araçlar Komut İstemi'ni seçin. Daha fazla bilgi için bkz . Geliştirici komut istemi kısayolları.

  2. Geliştirici komut istemi konsol penceresinde cl /Bv komutunu girin.

Çıktı şuna benzer görünmelidir:

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

Çıktının tamamını kopyalayıp raporunuz içine yapıştırın.

Komut satırı

Kodunuzu oluşturmak için kullanılan tam komut satırına cl.exe ve tüm bağımsız değişkenlerine ihtiyacımız var. Bu sayede makinelerimizde de aynı şekilde inşa edebiliriz. Bulduğunuz sorun yalnızca belirli bir bağımsız değişken veya bağımsız değişken birleşimiyle oluşturulurken mevcut olabileceğinden bu önemlidir.

Bu bilgileri bulmak için en iyi yer, sorundan hemen sonra derleme günlüğündedir. Komut satırının soruna katkıda bulunabilecek bağımsız değişkenlerin aynısını içermesini sağlar.

Komut satırının içeriğini raporlamak için

  1. CL.command.1.tlog dosyasını bulun ve açın. Varsayılan olarak, bu dosya \Visual Studio version\Projects\SolutionName ProjectNameConfiguration\ProjectName.tlog\\\CL.command.1.tlog konumundaki Belgeler klasörünüzde veya \Source\Repos\SolutionName ProjeAdı\\Yapılandırması\ProjeAdı.tlog\CL.command.1.tlog altındaki Kullanıcı klasörünüzde bulunur. Başka bir derleme sistemi kullanıyorsanız veya projeniz için varsayılan konumu değiştirdiyseniz farklı bir konumda olabilir.

    Bu dosyanın içinde, kaynak kod dosyalarınızın adlarını ve ardından her biri ayrı satırlarda derlemek için kullanılan komut satırı bağımsız değişkenlerini bulacaksınız.

  2. Sorunun oluştuğu kaynak kod dosyasının adını içeren satırı bulun. Aşağıdaki satır, karşılık gelen cl.exe komut bağımsız değişkenlerini içerir.

Komut satırının tamamını kopyalayıp raporunuz içine yapıştırın.

Sorunun açıklaması

Bulduğunuz sorunun ayrıntılı bir açıklamasına ihtiyacımız var. Bu sayede makinelerimizde de aynı etkiyi gördüğümüzi doğrulayabiliriz. Bazen neyi başarmaya çalıştığınızı ve ne olmasını beklediğinizi bilmemiz de yararlı olabilir.

İyi bir açıklama, araç takımı tarafından verilen tam hata iletilerini veya gördüğünüz tam çalışma zamanı davranışını sağlar. Sorunu düzgün bir şekilde yeniden oluşturduğunu doğrulamak için bu bilgilere ihtiyacımız var. Yalnızca son hata iletisini değil tüm derleyici çıkışını ekleyin. Bildirdiğiniz soruna yol açan her şeyi görmemiz gerekiyor. Sorunu komut satırı derleyicisini kullanarak yineleyebilirseniz, bu derleyici çıktısı tercih edilir. IDE ve diğer derleme sistemleri, gördüğünüz hata iletilerini filtreleyebilir veya bir hata iletisinin yalnızca ilk satırını yakalayabilir.

Sorun, derleyicinin geçersiz kodu kabul edip tanılama oluşturmamasıysa, bunu raporunuzda ekleyin.

Çalışma zamanı davranış sorununu bildirmek için, programın yazdıracaklarının ve görmeyi beklediğiniz şeyin tam bir kopyasını ekleyin. İdeal olarak, bunu çıkış deyiminin içine eklersiniz; örneğin, printf("This should be 5: %d\n", actual_result);. Programınız kilitleniyor veya kilitleniyorsa, bundan da bahsedin.

Bulduğunuz sorunu tanılamamıza yardımcı olabilecek, bulduğunuz tüm geçici çalışmalar gibi diğer ayrıntıları ekleyin. Raporunuzun başka bir yerinde bulunan bilgileri yinelememeye çalışın.

Yeniden oluşturma

Yeniden oluşturma, tam, kendi içinde yer alan bir kaynak kodu örneğidir. Bulduğunuz sorunu, dolayısıyla adı yeniden gösterir. Hatayı makinelerimizde yeniden oluşturabilmemiz için bir yeniden çoğaltmaya ihtiyacımız var. Kod, derlenen ve çalıştırılan temel bir yürütülebilir dosya oluşturmak için tek başına yeterli olmalıdır. Ya da bulduğunuz sorun için derlenip çalıştırılmaması gerekir. Yeniden oluşturma bir kod parçacığı değildir. Tam işlevlere ve sınıflara sahip olmalı ve standart üst bilgiler için bile tüm gerekli #include yönergelerini içermelidir.

İyi bir yeniden oluşturmanın ne anlamı var?

İyi bir yeniden oluşturma:

  • Minimal. Yeniden oluşturmalar mümkün olduğunca küçük olmalı ancak yine de bulduğunuz sorunu tam olarak göstermelidir. Yeniden oluşturmaların karmaşık veya gerçekçi olması gerekmez. Yalnızca Standart'a veya belgelenmiş derleyici uygulamasına uygun kodu göstermeleri gerekir. Eksik tanılama için repro'nuzda uyumlu olmayan kod gösterilmelidir. Sorunu göstermek için yalnızca yeterli kod içeren basit, noktadan noktaya yeniden oluşturmalar en iyisidir. Kodu ortadan kaldırıp basitleştirebilir ve uyumlu kalmaya devam edebilir ve aynı zamanda sorunu değiştirmeden bırakırsanız, bunu yapın. Çalışan kodun sayaç örneklerini eklemeniz gerekmez.

  • Bağımsız. Yeniden oluşturmalar gereksiz bağımlılıklardan kaçınmalıdır. Sorunu üçüncü taraf kitaplıkları olmadan yeniden üretebiliyorsanız, bunu yapın. Basit çıkış deyimlerinin (örneğin, puts("this shouldn't compile");, std::cout << value;ve printf("%d\n", value);) yanı sıra herhangi bir kitaplık kodu olmadan sorunu yeniden üretebiliyorsanız, bunu yapın. Örnek, herhangi bir kullanıcı üst bilgisine başvurmadan tek bir kaynak kod dosyasına daraltılabilirse idealdir. Soruna olası bir katkıda bulunan olarak düşünmemiz gereken kod miktarını azaltmak bizim için son derece yararlıdır.

  • En son derleyici sürümüne karşı. Yeniden oluşturmalar mümkün olduğunda araç takımının en son sürümüne yönelik en son güncelleştirmeyi kullanmalıdır. Alternatif olarak, sonraki güncelleştirmenin veya sonraki ana sürümün en son yayın öncesi sürümünü de kullanabilirsiniz. Araç takımının eski sürümlerinde bulabileceğiniz sorunlar genellikle daha yeni sürümlerde düzeltilmiştir. Düzeltmeler yalnızca istisnai durumlarda eski sürümlere geri aktarılır.

  • Uygunsa diğer derleyicilere karşı denetlendi. Taşınabilir C++ kodu içeren yeniden oluşturmalar, mümkünse diğer derleyicilere karşı davranışı doğrulamalıdır. C++ standardı sonunda program doğruluğunu belirler ve hiçbir derleyici mükemmel değildir. Ancak Clang ve GCC tanılama olmadan kodunuzu kabul ettiğinde ve MSVC kabul etmediğinde büyük olasılıkla derleyicimizde bir hata bulmuşsunuzdur. (Diğer olasılıklar Unix ve Windows davranışındaki farklılıklar veya farklı C++ standartları uygulama düzeyleri vb.) Tüm derleyiciler kodunuzu reddettiği zaman büyük olasılıkla kodunuz yanlıştır. Farklı hata iletileri görmek sorunu kendiniz tanılamanıza yardımcı olabilir.

    Iso C++ web sitesindeki Çevrimiçi C++ derleyicilerinde veya GitHub'da bu seçilmiş Çevrimiçi C++ Derleyicileri Listesi'nde kodunuzu test etmek için çevrimiçi derleyicilerin listesini bulabilirsiniz. Bazı özel örnekler Wandbox ve Derleyici Gezgini'dir.

    Not

    Çevrimiçi derleyici web siteleri Microsoft'a bağlı değildir. Birçok çevrimiçi derleyici web sitesi kişisel projeler olarak çalıştırılır. Bu sitelerden bazıları, bu siteyi okuduğunuzda kullanılamayabilir, ancak aramada kullanabileceğiniz başka siteler bulunmalıdır.

Derleyici, bağlayıcı ve kitaplıklardaki sorunlar kendilerini belirli şekillerde gösterme eğilimindedir. Bulacağınız sorun türü, raporunuz için ne tür bir yeniden oluşturma eklemeniz gerektiğini belirler. Uygun bir repro olmadan araştıracak bir şeyimiz yok. Aşağıda görebileceğiniz sorun türlerinden birkaçı yer alır. Her tür sorunu bildirmek için kullanmanız gereken yeniden oluşturma türünü oluşturma yönergelerini içerir.

Ön uç (ayrıştırıcı) kilitlenmesi

Ön uç kilitlenmeleri, derleyicinin ayrıştırma aşamasında oluşur. Genellikle, derleyici Önemli Hata C1001 yayar ve hatanın oluştuğu kaynak kod dosyasına ve satır numarasına başvurur. Genellikle msc1.cpp adlı bir dosyadan bahseder, ancak bu ayrıntıyı yoksayabilirsiniz.

Bu tür bir kilitlenme için Önceden işlenmiş bir yeniden oluşturma sağlayın.

Bu tür bir kilitlenme için örnek derleyici çıktısı aşağıda verilmiştir:

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

Arka uç (kod oluşturma) kilitlenmesi

Arka uç kilitlenmeleri, derleyicinin kod oluşturma aşamasında oluşur. Genellikle, derleyici Önemli Hata C1001 yayar ve sorunla ilişkili kaynak kod dosyasına ve satır numarasına başvurmayabilir. Genellikle derleyici\utc\src\p2\main.c dosyasından bahseder, ancak bu ayrıntıyı yoksayabilirsiniz.

Bu tür bir kilitlenme için , cl.exe için /GL komut satırı bağımsız değişkeni tarafından etkinleştirilen Bağlantı Zamanı Kod Oluşturma (LTCG) kullanıyorsanız bir Bağlantı yeniden oluşturma sağlayın. Aksi takdirde, bunun yerine önceden işlenmiş bir yeniden oluşturma sağlayın.

Aşağıda, LTCG'nin kullanılmadığı bir arka uç kilitlenmesi için derleyici çıkışı örneği verilmiştir. Derleyici çıkışınız aşağıdaki gibi görünüyorsa , Önceden işlenmiş bir yeniden oluşturma sağlamanız gerekir.

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

İç DERLEYICI HATASI ile başlayan satırda cl.exe yerine link.exe belirtiliyorsa LTCG etkinleştirilmiştir. Bu durumda bir Bağlantı yeniden oluşturması sağlayın. LTCG'nin derleyici hata iletisinden etkinleştirilip etkinleştirilmediği net olmadığında komut satırı bağımsız değişkenlerini inceleyin. Bunları , /GL komut satırı bağımsız değişkeninin önceki bir adımında derleme günlüğünüzden kopyalamıştınız.

Bağlayıcı kilitlenmesi

Bağlayıcı kilitlenmeleri, derleyici çalıştırıldıktan sonra bağlama aşamasında oluşur. Bağlayıcı genellikle Bağlayıcı Araçları Hatası LNK1000'i gösterir.

Not

Çıkış C1001'den bahsediyorsa veya Bağlantı Zamanı Kodu Oluşturma'yı içeriyorsa bunun yerine Arka uç (kod oluşturma) kilitlenmesi konusuna bakın.

Bu tür bir kilitlenme için bir Bağlantı yeniden oluşturma sağlayın.

Bu tür bir kilitlenme için derleyici çıktısı örneği aşağıda verilmiştir:

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

Artımlı bağlantı etkinleştirildiyse ve kilitlenme ancak başarılı bir ilk bağlantıdan sonra gerçekleştiyse, yani yalnızca sonraki bir artımlı bağlantının temel aldığı ilk tam bağlantıdan sonra, ilk bağlantı tamamlandıktan sonra değiştirilen kaynak dosyalara karşılık gelen nesne (.obj) ve kitaplık (.lib) dosyalarının bir kopyasını da sağlayın.

Hatalı kod oluşturma

Hatalı kod oluşturma nadirdir. Derleyici yanlışlıkla uygulamanızın çalışma zamanında kilitlenmesine neden olan yanlış kod oluşturduğunda oluşur. Bunun yerine, doğru kodu oluşturmalı veya derleme zamanında bir sorun algılamalıdır. Bulduğunuz sorunun hatalı kod oluşturmayla sonuçlandığına inanıyorsanız, raporunuzu arka uç (kod oluşturma) kilitlenmesi olarak değerlendirin.

Bu tür bir kilitlenme için, cl.exe için /GL komut satırı bağımsız değişkenini kullanıyorsanız bir Bağlantı yeniden oluşturması sağlayın. Aksi takdirde önceden işlenmiş bir yeniden oluşturma sağlayın.

Yeniden oluşturma

Sorunun kaynağını bulmamıza yardımcı olmak için iyi bir yeniden oluşturma çok önemlidir. Belirli tür yeniden oluşturma işlemleri için aşağıda açıklanan adımlardan herhangi birini yapmadan önce, sorunu gösteren kodu mümkün olduğunca daraltmaya çalışın. Bağımlılıkları, gerekli üst bilgileri ve kitaplıkları ortadan kaldırmayı veya en aza indirmeyi deneyin. Mümkünse kullanılan derleyici seçeneklerini ve önişlemci tanımlarını sınırlayın.

Aşağıda, farklı türlerdeki sorunları bildirmek için kullanacağınız çeşitli türlerdeki yeniden oluşturma yönergeleri yer almaktadır.

Önceden işlenmiş yeniden oluşturmalar

Önceden işlenmiş yeniden oluşturma, bir sorunu gösteren tek bir kaynak dosyadır. C önişlemcisinin çıkışından oluşturulur. Oluşturmak için özgün yeniden oluşturma kaynak dosyasında /P derleyici seçeneğini kullanın. Bu seçenek, ek kaynak ve üst bilgi dosyalarındaki bağımlılıkları kaldırmak için eklenen üst bilgileri satır içi olarak gösterir. Seçeneği ayrıca makroları, #ifdef koşulluları ve yerel ortamınıza bağlı olabilecek diğer önişlemci komutlarını çözer.

Not

Önceden işlenmiş yeniden oluşturmalar standart kitaplık uygulamamızdaki hataların sonucu olabilecek sorunlar için kullanışlı değildir, çünkü sorunu zaten düzeltip çözmediğimize bakmak için en son ve devam eden uygulamamızı kullanmak isteriz. Bu durumda, yeniden oluşturmayı ön işlemeyin ve sorunu tek bir kaynak dosyaya indiremiyorsanız, kodunuzu .zip bir dosyaya veya benzer bir dosyaya paketleyin veya IDE projesi yeniden oluşturma kullanmayı göz önünde bulundurun. Daha fazla bilgi için bkz. Diğer yeniden oluşturmalar.

Kaynak kod dosyasını önceden işlemek için

  1. Komut satırının içeriğini raporlamak için bölümünde açıklandığı gibi, yeniden oluşturmanızı oluşturmak için kullanılan komut satırı bağımsız değişkenlerini yakalayın.

  2. Projenizi oluşturmak için kullanılan Visual Studio sürümü ve yapılandırma mimarisiyle eşleşen Geliştirici Komut İstemi'ni açın.

  3. Yeniden oluşturma projenizi içeren dizine geçin.

  4. Geliştirici komut istemi konsol penceresinde cl /Pargumentsfilename.cpp komutunu girin. Bağımsız değişkenler için yukarıda yakaladığınız bağımsız değişkenlerin listesini kullanın. filename.cpp , yeniden oluşturma kaynak dosyanızın adıdır. Bu komut, yeniden oluşturma için kullandığınız komut satırını çoğaltır, ancak önişlemci geçtikten sonra derlemeyi durdurur. Ardından önceden işlenmiş kaynak kodunu filename.i dosyasına yazar.

C++/CX kaynak kodu dosyasını önceden işliyorsanız veya C++ Modülleri özelliğini kullanıyorsanız bazı ek adımlar gereklidir. Daha fazla bilgi için aşağıdaki bölümlere bakın.

Önceden işlenmiş dosyayı oluşturduktan sonra, önceden işlenmiş dosyayı derlerken sorunun yine de yeniden oluşturulduğundan emin olmak iyi bir fikirdir.

Önceden işlenmiş dosyanın yine de hatayı yeniden oluşturmasını onaylamak için

  1. Geliştirici komut istemi konsol penceresinde clarguments/TPfilename.i komutunu girerek cl.exe önceden işlenmiş dosyayı C++ kaynak dosyası olarak derlemesini söyleyin. Bağımsız değişkenler yukarıda yakalanan bağımsız değişkenlerle aynıdır, ancak /D ve /I bağımsız değişkenleri kaldırılmıştır. Bunun nedeni, önceden işlenmiş dosyaya zaten eklenmiş olmalarıdır. filename.i , önceden işlenmiş dosyanızın adıdır.

  2. Sorunun yeniden üretildiğini onaylayın.

Son olarak, önceden işlenmiş repro filename.i dosyasını raporunuzla ekleyin.

Önceden işlenmiş C++/CX WinRT/UWP kod yeniden oluşturmaları

Yürütülebilir dosyanızı derlemek için C++/CX kullanıyorsanız, önceden işlenmiş bir yeniden oluşturma oluşturmak ve doğrulamak için gereken bazı ek adımlar vardır.

C++/CX kaynak kodunu ön işleme

  1. Kaynak kod dosyasını önceden işlemek için bölümünde açıklandığı gibi önceden işlenmiş bir kaynak dosyası oluşturun.

  2. Oluşturulan filename.i dosyasında #using yönergeleri arayın.

  3. Başvuruda bulunılan tüm dosyaların listesini oluşturun. Tüm Windows*.winmd dosyalarını, platform.winmd dosyalarını ve mscorlib.dll.

Önceden işlenmiş dosyanın sorunu yine de yeniden oluşturduğunu doğrulamaya hazırlanmak için,

  1. Önceden işlenmiş dosya için yeni bir dizin oluşturun ve yeni dizine kopyalayın.

  2. .winmd dosyalarını #using listenizden yeni dizine kopyalayın.

  3. Yeni dizinde boş bir vccorlib.h dosyası oluşturun.

  4. mscorlib.dll için #using yönergelerini kaldırmak için önceden işlenmiş dosyayı düzenleyin.

  5. Kopyalanan .winmd dosyalarının mutlak yollarını yalnızca çıplak dosya adlarıyla değiştirmek için önceden işlenmiş dosyayı düzenleyin.

Yukarıdaki gibi, önceden işlenmiş dosyanın sorunu yine de yeniden oluşturduğunu onaylayın.

Önceden işlenmiş C++ Modülleri yeniden oluşturmaları

C++ derleyicisinin Modüller özelliğini kullanıyorsanız, önceden işlenmiş bir yeniden oluşturma oluşturmak ve doğrulamak için gereken bazı farklı adımlar vardır.

Modül kullanan bir kaynak kod dosyasını önceden işlemek için

  1. Komut satırının içeriğini raporlamak için bölümünde açıklandığı gibi, yeniden oluşturmanızı oluşturmak için kullanılan komut satırı bağımsız değişkenlerini yakalayın.

  2. Projenizi oluşturmak için kullanılan Visual Studio sürümü ve yapılandırma mimarisiyle eşleşen Geliştirici Komut İstemi'ni açın.

  3. Yeniden oluşturma projenizi içeren dizine geçin.

  4. Geliştirici komut istemi konsol penceresinde cl /Pargumentsfilename.cpp komutunu girin. Bağımsız değişkenler yukarıda yakalanan bağımsız değişkenlerdir ve filename.cpp, modülü kullanan kaynak dosyanın adıdır.

  5. Modül arabirimini (.ifc çıkışı) oluşturan yeniden oluşturma projesini içeren dizine geçin.

  6. Modül arabiriminizi oluşturmak için kullanılan komut satırı bağımsız değişkenlerini yakalayın.

  7. Geliştirici komut istemi konsol penceresinde cl /Pargumentsmodulename.ixx komutunu girin. Bağımsız değişkenler yukarıda yakalanan bağımsız değişkenlerdir ve modulename.ixx, modül arabirimini oluşturan dosyanın adıdır.

Önceden işlenmiş dosyaları oluşturduktan sonra, önceden işlenmiş dosyayı kullanırken sorunun yine de yeniden oluşturulduğundan emin olmak iyi bir fikirdir.

Önceden işlenmiş dosyanın hatanın yine de yeniden üretildiğinden emin olmak için

  1. Geliştirici konsolu penceresinde yeniden oluşturma projenizi içeren dizine geri dönün.

  2. Önceden işlenmiş dosyayı bir C++ kaynak dosyası gibi derlemek için yukarıdaki gibi clarguments/TPfilename.i komutunu girin.

  3. Sorunun önceden işlenmiş dosya tarafından yine de yeniden üretildiğini onaylayın.

Son olarak, önceden işlenmiş yeniden oluşturma dosyalarını (filename.i ve modulename.i) raporunuza .ifc çıkışıyla birlikte ekleyin.

Bağlantı yeniden oluşturma, link_repro ortam değişkeni tarafından veya /LINKREPRO bağlayıcı seçeneğine bağımsız değişken olarak belirtilen bir dizinin bağlayıcı tarafından oluşturulan içeriğidir. Bağlantı zamanında oluşan bir sorunu topluca gösteren derleme yapıtları içerir. Örnek olarak Bağlantı Zamanı Kodu Oluşturma (LTCG) veya bağlayıcı kilitlenmesi içeren arka uç kilitlenmesi verilebilir. Bu derleme yapıtları, sorunun yeniden oluşturulabilmesi için bağlayıcı girişi olarak gereken yapıtlardır. Bu ortam değişkeni kullanılarak kolayca bir bağlantı yeniden oluşturma oluşturulabilir. Bağlayıcının yerleşik yeniden oluşturma özelliğini etkinleştirir.

  1. Yeniden oluşturma işlemini oluşturmak için kullanılan komut satırı bağımsız değişkenlerini, Komut satırının içeriğini raporlama bölümünde açıklandığı gibi yakalayın.

  2. Projenizi derlemek için kullanılan Visual Studio sürümü ve yapılandırma mimarisiyle eşleşen Geliştirici Komut İstemi'ni açın.

  3. Geliştirici komut istemi konsol penceresinde, yeniden oluşturma projenizi içeren dizine geçin.

  4. Bağlantı yeniden oluşturma için linkrepro adlı bir dizin oluşturmak için mkdir linkrepro girin. Başka bir bağlantı yeniden oluşturması yakalamak için farklı bir ad kullanabilirsiniz.

  5. link_repro ortam değişkenini oluşturduğunuz dizine ayarlamak için link_repro=linkrepro komut kümesini girin. Derlemeniz genellikle daha karmaşık projelerde olduğu gibi farklı bir dizinden çalıştırılıyorsa link_repro bağlantı yeniden oluşturma dizininizin tam yoluna ayarlayın.

  6. Visual Studio'da yeniden oluşturma projesini oluşturmak için geliştirici komut istemi konsol penceresine devenv komutunu girin. link_repro ortam değişkeninin değerinin Visual Studio'ya görünür olmasını sağlar. Projeyi komut satırında oluşturmak için yukarıda yakalanan komut satırı bağımsız değişkenlerini kullanarak yeniden oluşturma derlemesini çoğaltın.

  7. Yeniden oluşturma projenizi derleyin ve beklenen sorunun oluştuğundan eminin.

  8. Derlemeyi yapmak için kullandıysanız Visual Studio'yu kapatın.

  9. Geliştirici komut istemi konsol penceresinde , link_repro ortam değişkenini temizlemek için link_repro = komut kümesini girin.

Son olarak, linkrepro dizininin tamamını bir .zip dosyasına veya benzer bir dosyaya sıkıştırarak yeniden oluşturmayı paketleyin ve raporunuze ekleyin.

/LINKREPRO bağlayıcı seçeneği, link_repro ortam değişkeniyle aynı etkiye sahiptir. Oluşturulan bağlantı yeniden oluşturma için filtreleneceği adı belirtmek için /LINKREPROTARGET seçeneğini kullanabilirsiniz. /LINKREPROTARGET kullanmak için /OUT bağlayıcı seçeneğini de belirtmeniz gerekir.

  1. Bağlantı yeniden oluşturmayı tutmak için bir dizin oluşturun. Oluşturduğunuz tam dizin yoluna dizin yolu olarak başvuracağız. Yol boşluk içeriyorsa yolun çevresinde çift tırnak işareti kullanın.

  2. Bağlayıcı komut satırına /LINKREPRO:directory-path komutunu ekleyin. Visual Studio'da projenizin Özellik Sayfaları iletişim kutusunu açın. Yapılandırma Özellikleri>Bağlayıcı>komut satırı özellik sayfasını seçin. Ardından, Ek Seçenekler kutusuna /LINKREPRO:directory-path seçeneğini girin. Değişikliklerinizi kaydetmek için Tamam'ı seçin.

  3. Yeniden oluşturma projenizi derleyin ve beklenen sorunun oluştuğundan eminin.

Son olarak, dizin yolu bağlantı yeniden oluşturma dizininin tamamını .zip bir dosyaya veya benzer bir dosyaya sıkıştırarak yeniden oluşturmayı paketleyin ve raporunuze ekleyin.

Diğer yeniden oluşturmalar

Sorunu tek bir kaynak dosyaya veya önceden işlenmiş yeniden oluşturmaya indirgeyemiyorsanız ve sorun için bağlantı yeniden oluşturma gerekmiyorsa, bir IDE projesini araştırabiliriz. İyi bir yeniden oluşturmanın nasıl oluşturulacağıyla ilgili tüm yönergeler yine de geçerlidir: Kodun çok az ve bağımsız olması gerekir. Sorun en son araçlarımızda ortaya çıkmalı ve uygunsa diğer derleyicilerde görülmemelidir.

Repro'nuzu minimum bir IDE projesi olarak oluşturun, ardından dizin yapısının tamamını .zip bir dosyaya veya benzer bir dosyaya sıkıştırıp raporunuze ekleyerek paketleyin.

Raporunuzu gönderme yolları

Raporunuzu bize göndermek için kullanabileceğiniz birkaç iyi yöntem vardır. Visual Studio'nun yerleşik sorun raporlama aracını veya Visual Studio Geliştirici Topluluğu sayfasını kullanabilirsiniz. Bu sayfanın alt kısmında bir Ürün geri bildirimi düğmesi de vardır. Seçim, ekran görüntülerini yakalamak ve raporunuzu düzenlemek için IDE'deki yerleşik araçları kullanmak isteyip istemediğinize bağlıdır. Bunu yapmak istemiyorsanız doğrudan Geliştirici Topluluğu web sitesini kullanabilirsiniz.

Not

Raporunuzu nasıl gönderdiğinizden bağımsız olarak, Microsoft gizliliğinize saygı duyar. Microsoft, tüm veri gizliliği yasalarına ve düzenlemelerine uymayı taahhüt etmiştir. Bize gönderdiğiniz verileri nasıl ele aldığımız hakkında bilgi için bkz. Microsoft Gizlilik Bildirimi.

Sorun Bildir aracını kullanma

Visual Studio'da Sorun Bildir aracı, Visual Studio kullanıcılarının yalnızca birkaç tıklamayla sorunları bildirmesinin bir yoludur. Bulduğunuz sorunla ilgili ayrıntılı bilgi göndermek için basit bir form açılır. Daha sonra IDE'den ayrılmadan raporunuzu gönderebilirsiniz.

Sorun Bildir aracı aracılığıyla sorununuzu bildirmek, IDE'den kolay ve kullanışlıdır. Hızlı Başlat arama kutusunun yanındaki Geri Bildirim Gönder simgesini seçerek başlık çubuğundan bu simgeye erişebilirsiniz. İsterseniz, bunuGeri Bildirim> Göndermeye Yardımcı Olun>Sorun Bildir'indeki menü çubuğunda da bulabilirsiniz.

Bir sorunu bildirmeyi seçtiğinizde, önce benzer sorunlar için Geliştirici Topluluğu arayın. Sorununuzun daha önce bildirilmiş olması durumunda raporu destek oyuyla ek ayrıntılarla açıklama ekleyin. Benzer bir sorun görmüyorsanız, Visual Studio Geri Bildirim iletişim kutusunun altındaki Yeni sorun bildir düğmesini seçin ve sorununuzu bildirmek için adımları izleyin.

Visual Studio Geliştirici Topluluğu sayfalarını kullanma

Visual Studio Geliştirici Topluluğu sayfaları, sorunları bildirmenin ve Visual Studio ile C++ derleyicisi, araçları ve kitaplıkları için çözümler bulmanın başka bir kullanışlı yoludur. Visual Studio, Mac için Visual Studio, .NET, C++, Azure DevOps ve Azure DevOps Server için belirli Geliştirici Topluluğu sayfaları vardır.

Topluluk sekmelerinin altında, her sayfanın üst kısmında bir arama kutusu bulunur. Sizinkine benzer sorunları bildiren gönderileri bulmak için bu gönderiyi kullanabilirsiniz. Sorununuzla ilgili bir çözümün veya diğer yararlı bilgilerin zaten mevcut olduğunu fark edebilirsiniz. Daha önce birisi aynı sorunu bildirmişse, yeni bir sorun raporu oluşturmak yerine o rapora destek oyu ve açıklama ekleyin. Yorum yapmak, oy vermek veya yeni bir sorun bildirmek için Visual Studio hesabınızda oturum açmanız istenebilir. İlk kez oturum açtığınızda, Geliştirici Topluluğu uygulamasına profilinize erişim vermeyi kabul etmek zorunda kalacaksınız.

C++ derleyicisi, bağlayıcısı ve diğer araç ve kitaplıklarla ilgili sorunlar için önce C++ Geliştirici Topluluğu sayfasında arama yapın. Sorununuzu arıyorsanız ve daha önce bildirilmemişse, arama kutusunun yanındaki Sorun bildir düğmesini seçin. Yeniden oluşturma kodunuzu ve komut satırınızı, ekran görüntülerini, ilgili tartışmaların bağlantılarını ve ilgili ve yararlı olduğunu düşündüğünüz diğer tüm bilgileri ekleyebilirsiniz.

İpucu

Visual Studio'da C++ araç takımıyla ilgili olmayan diğer sorun türleri için (örneğin, kullanıcı arabirimi sorunları, bozuk IDE işlevselliği veya genel kilitlenmeler), IDE'deki Sorun Bildir aracını kullanın. Ekran görüntüsü özellikleri ve bulduğunuz soruna yol açan kullanıcı arabirimi eylemlerini kaydetme özelliği nedeniyle bu en iyi seçenektir. Bu tür hatalar Visual Studio Geliştirici Topluluğu sitesinde de aranabilir. Daha fazla bilgi için bkz. Visual Studio ile ilgili bir sorunu bildirme.

Raporlar ve gizlilik

Raporlardaki tüm bilgiler ve tüm açıklamalar ve yanıtlar varsayılan olarak genel olarak görünür. Normalde bu bir avantajdır çünkü tüm topluluğun diğer kullanıcıların bulduğu sorunları, çözümleri ve geçici çözümleri görmesine olanak tanır. Ancak, gizlilik veya fikri mülkiyet nedenleriyle verilerinizi veya kimliğinizi herkese açık hale getirme konusunda endişeleriniz varsa seçenekleriniz vardır.

Kimliğinizi açığa çıkarmakla ilgileniyorsanız, sizinle ilgili hiçbir ayrıntıyı açıklamayan yeni bir Microsoft hesabı oluşturun . Raporunuzu oluşturmak için bu hesabı kullanın.

Genel olan ilk raporun başlığına veya içeriğine gizli tutmak istediğiniz hiçbir şeyi koymayın. Bunun yerine, ayrıntıları ayrı bir açıklamayla özel olarak gönderebilirsiniz. Raporunuzun doğru kişilere yönlendirildiğinden emin olmak için sorun raporunuzun konu listesine cppcompiler ekleyin. Sorun raporu oluşturulduktan sonra, yanıtlarınızı ve eklerinizi kimlerin görebileceğini belirtmek artık mümkündür.

Özel bilgiler için sorun raporu oluşturmak için

  1. Oluşturduğunuz raporda Açıklama ekle'yi seçerek sorunun özel açıklamasını oluşturun.

  2. Yanıt düzenleyicisinde Gönder veİptal düğmelerinin altındaki açılan denetimi kullanarak yanıtınızın hedef kitlesini belirtin. Yalnızca belirttiğiniz kişiler bu özel yanıtları ve bunlara eklediğiniz tüm resimleri, bağlantıları veya kodları görebilir. Microsoft çalışanlarının ve kendinizin görünürlüğünü sınırlamak için moderatörler tarafından görüntülenebilir'i ve özgün posteri seçin.

  3. Açıklamayı ve yeniden oluşturma için gereken diğer bilgileri, resimleri ve dosya eklerini ekleyin. Bu bilgileri özel olarak göndermek için Gönder düğmesini seçin.

    Ekli dosyalarda 2 GB ve en fazla 10 dosya sınırı vardır. Daha büyük yüklemeler için özel açıklamanızda bir karşıya yükleme URL'si isteyin.

Bu açıklama altındaki tüm yanıtlar belirttiğiniz sınırlı görünürlüğe sahiptir. Yanıtlardaki açılan liste denetimi kısıtlı görünürlük durumunu doğru göstermiyorsa bile bu doğrudur.

Gizliliğinizi korumak ve hassas bilgilerinizi genel görünümden uzak tutmak için dikkatli olun. Kısıtlı açıklamanın altındaki yanıtlar için Microsoft ile tüm etkileşimi koruyun. Diğer yorumlara verilen yanıtlar, hassas bilgileri yanlışlıkla açıklamanıza neden olabilir.

C++ belgeleri sorununu bildirme

Belgelerimizde bildirilen sorunları izlemek için GitHub sorunlarını kullanırız. Artık doğrudan bir içerik sayfasından GitHub sorunları oluşturabilirsiniz. Bu sayede yazarlar ve ürün ekipleriyle çok daha zengin bir şekilde etkileşim kurabilirsiniz. Bir belge, hatalı kod örneği, kafa karıştırıcı bir açıklama, kritik bir eksiklik veya hatta yazım hatasıyla ilgili bir sorun görürseniz, bize kolayca bildirebilirsiniz. Belge geri bildirimi sağlamak için sayfayı en alta kaydırın ve Oturum aç'ı seçin. Henüz bir GitHub hesabınız yoksa bir GitHub hesabı oluşturmanız gerekir. GitHub hesabınız olduğunda tüm belge sorunlarımızı ve bunların durumunu görebilirsiniz. Ayrıca, bildirdiğiniz sorunla ilgili değişiklikler yapıldığında da bildirim alırsınız. Daha fazla bilgi için Geri Bildirim Sistemi blog girdimize bakın.

Belge geri bildirimi düğmesini kullandığınızda GitHub'da bir belge sorunu oluşturursunuz. Sorun, sorunu oluşturduğunuz sayfayla ilgili bazı bilgilerle otomatik olarak doldurulur. Sorunun nerede olduğunu bu şekilde anlıyoruz, bu nedenle bu bilgileri düzenlemeyin. Sorunun ne olduğuyla ilgili ayrıntıları ve isterseniz önerilen bir düzeltmeyi eklemeniz gerekir. C++ belgelerimiz açık kaynak, bu nedenle kendiniz bir düzeltme göndermek isterseniz, bunu yapabilirsiniz. Belgelerimize nasıl katkıda bulunabileceğiniz hakkında daha fazla bilgi için GitHub'da Katkıda Bulunma kılavuzumuza bakın.