Aracılığıyla paylaş


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 sorunlarla karşılaşırsanız, bunları öğrenmek istiyoruz. Sorun belgelerimizde olduğunda, bunu da bilmek istiyoruz.

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ı nasıl oluşturduğunuzla ilgili tüm ayrıntılara sahip olmalıdır. Ve bir yeniden oluşturma, sorunu kendi makinelerimizde yeniden oluşturmak için kullanabileceğimiz eksiksiz bir test çalışması içermelidir. Bu bilgiler, sorunun kodumuzda var 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 raporun ne olduğu hakkında bilgi edinin. 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şturmak 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:

  • Kullanmakta olduğunuz 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ş, bağımsız 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ü

Soruna neden olan araç takımının tam sürüm bilgilerine ve hedef mimarisine ihtiyacımız var. Bu nedenle, yeniden oluşturmanı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 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. Örneğin, x64 hedefleri için x64 üzerinde Visual Studio 2017 kullanarak derleme yapıyorsanız 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.

Çıkış ş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 vardır. Bu sayede makinelerimizin üzerinde de aynı şekilde oluşturabiliriz. Bulduğunuz sorun yalnızca belirli bir bağımsız değişken veya bağımsız değişken bileşimiyle oluşturulurken mevcut olabileceğinden ö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 tam olarak aynı olmasını 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 ProjectName Configuration\ProjectName.tlog\\\CL.command.1.tlog içindeki Belgeler klasörünüzde veya \Source\Repos\SolutionName ProjectName\Yapılandırma\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 bunları derlemek için kullanılan komut satırı bağımsız değişkenlerini ve her birini ayrı satırlarda bulun.

  2. Sorunun oluştuğu kaynak kod dosyasının adını içeren satırı bulun. Altındaki 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. Ayrıca bazen neyi başarmaya çalıştığınızı ve ne olmasını beklediğinizi bilmek 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. Komut satırı derleyicisini kullanarak sorunu çoğaltabiliyorsanız, bu derleyici çıktısı tercih edilir. IDE ve diğer derleme sistemleri, gördüğünüz hata iletilerini filtreleyip yalnızca hata iletisinin ilk satırını yakalayabilir.

Sorun, derleyicinin geçersiz kod kabul etmemesi ve tanılama oluşturmamasıysa, bunu raporunuzda ekleyin.

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

Bulduğunuz sorunu tanılamamıza yardımcı olabilecek diğer ayrıntıları (bulduğunuz geçici çalışmalar gibi) 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 ve dolayısıyla adı yeniden gösterir. Hatayı makinelerimizde yeniden oluşturabilmemiz için bir yeniden oluşturma gerekir. Kod, derlenen ve çalışan temel bir yürütülebilir dosya oluşturmak için tek başına yeterli olmalıdır. Veya bu, bulduğunuz sorun için derlenip çalıştırılır. 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 gerekli tüm #include yönergelerini içermelidir.

İyi bir yeniden oluşturma yapan şey

İyi bir yeniden oluşturma:

  • En az. Yeniden oluşturma işlemleri mümkün olduğunca küçük olmalıdır ancak yine de tam olarak bulduğunuz sorunu gösterir. 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'nuz uyumlu olmayan kodu göstermelidir. Sorunu göstermek için yalnızca yeterli kod içeren basit, noktadan noktaya yeniden oluşturma işlemleri en iyisidir. Kodu ortadan kaldırıp basitleştirebilir ve uyumlu kalmaya devam edebilir ve sorunu değiştirmeden bırakırsanız, bunu yapın. Çalışan kodlara karşı örnekler eklemeniz gerekmez.

  • Bağımsız. Yeniden oluşturmalar gereksiz bağımlılıklardan kaçınmalıdır. Sorunu üçüncü taraf kitaplıklar olmadan yeniden oluşturabiliyorsanı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 oluşturabilirseniz, bunu yapın. Örnek, herhangi bir kullanıcı üst bilgisine başvurmadan tek bir kaynak kodu dosyasına daraltılabilirse idealdir. Soruna olası bir katkıda bulunan olarak düşünmemiz gereken kod miktarını azaltmak bizim için çok yararlı olur.

  • 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üzeltilir. 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ı sonuçta program doğruluğunu belirler ve hiçbir derleyici mükemmel değildir. Ancak Clang ve GCC kodunuzu tanılama olmadan kabul ettiğinde ve MSVC kabul etmediğinde büyük olasılıkla derleyicimizde bir hata buldunuz. (Diğer olasılıklar Unix ve Windows davranışındaki farkları veya farklı C++ standartları uygulama düzeylerini vb.) içerir. 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 kodunuzu test etmek için çevrimiçi derleyicilerin listesini veya GitHub'daki bu çevrimiçi C++ Derleyicileri 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ı, bunu okuduğunuzda kullanılamayabilir, ancak bir aramada kullanabileceğiniz başka siteler bulunmalıdır.

Derleyicideki, bağlayıcıdaki ve kitaplıklardaki sorunlar kendilerini belirli şekillerde gösterme eğilimindedir. Bulacağınız sorun türü, raporunuzda ne tür bir yeniden oluşturma eklemeniz gerektiğini belirler. Uygun bir repro olmadan, araştıracak bir şeyimiz yok. Burada, karşılaşabileceğiniz sorunlardan 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

Derleyicinin ayrıştırma aşamasında ön uç kilitlenmeleri 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şti:

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ı Kodu Oluşturma (LTCG) kullanıyorsanız bir Bağlantı yeniden oluşturması sağlayın. Aksi takdirde, bunun yerine Önceden İşlenmiş bir yeniden oluşturma sağlayın.

Aşağıda, LTCG'nin kullanılmadığı arka uç kilitlenmesi için örnek derleyici çıktısı verilmişti. Derleyici çıkışınız aşağıdaki gibi görünüyorsa, Önceden İş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şturma 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 gösterir.

Not

Çıkış C1001'den bahsediyorsa veya Bağlantı Zamanı Kod Oluşturma'yı içeriyorsa bunun yerine Arka uç (kod oluşturma) kilitlenmesine 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şti:

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 yalnızca başarılı bir ilk bağlantıdan sonra oluştuysa, yani daha 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çlanacağına inanıyorsanız, raporunuzu Arka uç (kod oluşturma) kilitlenmesi ile aynı şekilde 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 İş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şturmalar 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 kullanılacak çeşitli türlerde yeniden oluşturma yönergeleri yer almaktadır.

Önceden işlenmiş yeniden üretimler

Önceden işlenmiş yeniden oluşturma, bir sorunu gösteren tek bir kaynak dosyadır. C ön işlemcisinin çıkışından oluşturulur. Bir tane oluşturmak için özgün yeniden oluşturma kaynak dosyasında /P derleyicisi seçeneğini kullanın. Bu seçenek, diğer 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ü genellikle sorunu zaten giderip çözmediğimize bakmak için en son devam eden uygulamamızı değiştirmek isteriz. Bu durumda, yeniden oluşturmayı ön işlemeyin ve sorunu tek bir kaynak dosyaya indirgeyemiyorsanı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. 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 raporlamak için 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. Yeniden oluşturma projenizi içeren dizine geçin.

  4. Geliştirici komut istemi konsol penceresinde, filename.cpp cl /P bağımsız değişkenlerini 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ı adımlar daha 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 yinelendiğinden emin olmak iyi bir fikirdir.

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

  1. Geliştirici komut istemi konsol penceresinde, komut cl bağımsız değişkenleri /TP filename.i girin ve 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 tüm /D ve /I bağımsız değişkenleri kaldırılı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ı oluşturmak için C++/CX kullanıyorsanız, önceden işlenmiş bir yeniden oluşturma oluşturmak ve doğrulamak için bazı ek adımlar gerekir.

C++/CX kaynak kodunu önceden işlemek için

  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ıda gösterildiği 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. 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 raporlamak için 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. Yeniden oluşturma projenizi içeren dizine geçin.

  4. Geliştirici komut istemi konsol penceresinde, filename.cpp cl /P bağımsız değişkenlerini 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 /P arguments modulename.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 yinelendiğinden emin olmak iyi bir fikirdir.

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

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

  2. Önceden işlenmiş dosyayı bir C++ kaynak dosyasıymış gibi derlemek için yukarıdaki gibi /TP filename.i komutu bağımsız değişkenlerini girin.

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

Son olarak, raporunuza .ifc çıkışıyla birlikte önceden işlenmiş yeniden oluşturma dosyalarını (filename.i ve modulename.i) 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ını içerir. Örnek olarak Bağlantı Zamanı Kodu Oluşturma (LTCG) veya bağlayıcı kilitlenmesi içeren bir 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 raporlamak için 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şturma 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 projeler için 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'da görünür olmasını sağlar. Projeyi komut satırında derlemek 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 oluşturun ve beklenen sorunun oluştuğundan emin olun.

  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şturması için filtre kullanılacak adı belirtmek için /LINKREPROTARGET seçeneğini kullanabilirsiniz. /LINKREPROTARGET kullanmak için /OUT bağlayıcısı 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. Boşluklar 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ısı>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 oluşturun ve beklenen sorunun oluştuğundan emin olun.

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 bir bağlantı yeniden oluşturması gerekmiyorsa, bir IDE projesini araştırabiliriz. İyi bir yeniden oluşturmayla ilgili tüm yönergeler yine de geçerlidir: Kod en düşük düzeyde ve kendi içinde olmalıdır. Sorun en son araçlarımızda ortaya çıkmalı ve uygunsa diğer derleyicilerde görülmemelidir.

Repro'nuzu en düşük IDE projesi olarak oluşturun, ardından dizin yapısının tamamını .zip bir dosyaya veya benzer bir dosyaya sıkıştırarak paketleyin ve raporunuze ekleyin.

Raporunuzu göndermenin yolları

Raporunuzu bize göndermek için birkaç iyi yolunuz 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 çıkmadan 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 erişebilirsiniz. Alternatif olarak, bunu Geri Bildirim>Göndermeye Yardımcı Olun>Sorun Bildir'indeki menü çubuğunda bulabilirsiniz.

Bir sorun bildirmeyi seçtiğinizde, önce Geliştirici Topluluğu benzer sorunlar için arama yapın. Sorununuzun daha önce bildirilmiş olması durumunda raporu destekleyin ve daha ayrıntılı açıklamalar 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ına yakın bir arama kutusu bulunur. Sizinkine benzer sorunları bildiren gönderileri bulmak için bunu kullanabilirsiniz. Sorununuzla ilgili bir çözümün veya diğer yararlı bilgilerin zaten mevcut olduğunu fark edebilirsiniz. Daha önce biri aynı sorunu bildirmişse, yeni bir sorun raporu oluşturmak yerine o rapora destek oyu ve açıklama ekleyin. Yeni bir soruna yorum yapmak, oy vermek veya 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 etmiş olmanız gerekir.

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 henüz bildirilmiş değilse, 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

İlk Geliştirici Topluluğu raporundaki bilgiler her zaman genel olacaktır. Bu bir sorunsa Raporlar ve gizlilik hakkındaki sonraki bölüme bakın.

İpucu

Visual Studio'da C++ araç kümesiyle (örneğin, kullanıcı arabirimi sorunları, bozuk IDE işlevleri veya genel kilitlenmeler) ilgili olmayan diğer sorun türleri için IDE'de Sorun Bildir aracını kullanın. Bu, ekran görüntüsü özellikleri ve bulduğunuz soruna yol açan kullanıcı arabirimi eylemlerini kaydetme özelliği nedeniyle 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. Bununla birlikte, gizlilik veya fikri mülkiyet nedenleriyle verilerinizi veya kimliğinizi herkese açık hale getirmekle ilgileniyorsanız seçenekleriniz vardır.

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

Gizli tutmak istediğiniz hiçbir şeyi ilk raporun başlığına veya içeriğine (genel olan) 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 belirtebilirsiniz.

Ö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, yanıtınızın hedef kitlesini belirtmek için Gönder ve İptal düğmelerinin altındaki açılan menü denetimini kullanın. 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ı ve kendiniz için görünürlüğü 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şleminiz 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östermese bile 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 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 bildiriminde bulunmak için sayfanın en altına 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 sayfa hakkında 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.