Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
C++ Dinamik Hata Ayıklama şu anda önizleme aşamasındadır. Bu bilgiler, yayından önce önemli ölçüde değiştirilebilen bir ön sürüm özelliğiyle ilgilidir. Microsoft, burada sağlanan bilgilerle ilgili olarak açık veya zımni hiçbir garanti vermez.
Visual Studio 2022 Sürüm 17.14 Önizleme 2 ile başlayan bu önizleme özelliği yalnızca x64 projeleri için geçerlidir.
C++ Dinamik Hata Ayıklama ile iyileştirilmiş kodun hatalarını iyileştirilmemiş gibi ayıklayabilirsiniz. Bu özellik, yüksek kare hızlarına ihtiyaç duyan oyun geliştiricileri gibi iyileştirilmiş kodun performans avantajlarına ihtiyaç duyan geliştiriciler için kullanışlıdır. C++ Dinamik Hata Ayıklama ile iyileştirilmiş derlemelerin performans avantajlarından ödün vermeden iyileştirilmemiş kodun hata ayıklama deneyiminin keyfini çıkarabilirsiniz.
İyileştirilmiş kodda hata ayıklamak zorluklara neden olabilir. Derleyici, kodu iyileştirmek için yönergeleri yeniden konumlandırır ve yeniden düzenler. Sonuç daha verimli bir koddur, ancak şu anlama gelir:
- İyileştirici yerel değişkenleri kaldırabilir veya hata ayıklayıcı tarafından bilinmeyen konumlara taşıyabilir.
- İyileştirici kod bloklarını birleştirdiğinde işlevin içindeki kod artık kaynak kodla uyumlu olmayabilir.
- İyileştirici iki işlevi birleştirirse çağrı yığınındaki işlevlerin işlev adları yanlış olabilir.
Geçmişte geliştiriciler, iyileştirilmiş kodda hata ayıklama sürecindeyken bu sorunlarla ve diğer sorunlarla ilgilendi. C++ Dinamik Hata Ayıklama ile iyileştirilmiş koda, iyileştirilmemiş gibi adım atabilmeniz mümkün olduğundan bu zorluklar ortadan kaldırılmıştır.
İyileştirilmiş ikili dosyaların oluşturulmasına ek olarak, /dynamicdeopt
ile derleme, hata ayıklama sırasında kullanılan optimize edilmemiş ikili dosyalar da üretir. Kesme noktası eklediğinizde veya bir işlevin içine (c __forceinline
işlevler dahil) adım attığınızda, hata ayıklayıcı iyileştirilmemiş ikiliyi yükler. Ardından iyileştirilmiş kod yerine işlev için iyileştirilmemiş kodun hatalarını ayıklayabilirsiniz. Programın geri kalanında optimize edilmiş kodun performans avantajlarını elde ederken, sanki optimize edilmemiş kodu hata ayıklıyormuşsunuz gibi hata ayıklayabilirsiniz.
C++ Dinamik Hata Ayıklamayı Deneyin
İlk olarak, iyileştirilmiş kodda hata ayıklamanın nasıl bir şey olduğunu gözden geçirelim. Ardından C++ Dinamik Hata Ayıklama'nın işlemi nasıl basitleştirdiğini görebilirsiniz.
Visual Studio'da yeni bir C++ konsol uygulaması projesi oluşturun. ConsoleApplication.cpp dosyasının içeriğini aşağıdaki kodla değiştirin:
// Code generated by GitHub Copilot #include <iostream> #include <chrono> #include <thread> using namespace std; int step = 0; const int rows = 20; const int cols = 40; void printGrid(int grid[rows][cols]) { cout << "Step: " << step << endl; for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { cout << (grid[i][j] ? '*' : ' '); } cout << endl; } } int countNeighbors(int grid[rows][cols], int x, int y) { int count = 0; for (int i = -1; i <= 1; ++i) { for (int j = -1; j <= 1; ++j) { if (i == 0 && j == 0) { continue; } int ni = x + i; int nj = y + j; if (ni >= 0 && ni < rows && nj >= 0 && nj < cols) { count += grid[ni][nj]; } } } return count; } void updateGrid(int grid[rows][cols]) { int newGrid[rows][cols] = { 0 }; for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { int neighbors = countNeighbors(grid, i, j); if (grid[i][j] == 1) { newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1; } else { newGrid[i][j] = (neighbors == 3) ? 1 : 0; } } } // Copy newGrid back to grid for (int i = 0; i < rows; ++i) { for (int j = 0; j < cols; ++j) { grid[i][j] = newGrid[i][j]; } } } int main() { int grid[rows][cols] = { 0 }; // Initial configuration (a simple glider) grid[1][2] = 1; grid[2][3] = 1; grid[3][1] = 1; grid[3][2] = 1; grid[3][3] = 1; while (true) { printGrid(grid); updateGrid(grid); std::this_thread::sleep_for(std::chrono::milliseconds(100)); cout << "\033[H\033[J"; // Clear the screen step++; } return 0; }
Çözüm Yapılandırmaları açılan listesini Yayın olarak değiştirin. Çözüm platformu açılan listesinin x64 olarak ayarlandığından emin olun.
Çözümü Derle>Yeniden Derle öğesini seçerek yeniden oluşturun.
int neighbors = countNeighbors(grid, i, j);
updateGrid()
içinde, 55. satıra bir kesme noktası ayarlayın. Programı çalıştırın.Kesme noktasına bastığınızda Yereller penceresini görüntüleyin. Ana menüdeWindows>YerelLerinde Hata Ayıkla'yı> seçin. veya değerini
i
j
Yerel Ayarlar penceresinde göremezseniz dikkat edin. Derleyici bunları optimize ederek ortadan kaldırmıştır.cout << (grid[i][j] ? '*' : ' ');
printGrid()
içinde 19. satırda bir kesme noktası ayarlamayı deneyin. Yapamazsınız. Derleyici kodu iyileştirdiğinden bu davranış beklenir.
Programı durdurun ve C++ Dinamik Hata Ayıklama'yı etkinleştirin ve yeniden deneyin
Çözüm Gezgini'nde projeye sağ tıklayın ve Özellikler'i seçerek proje özellik sayfalarını açın.
Gelişmiş>C++ Dinamik Hata Ayıklama kullan'ı seçin ve ayarı Evet olarak değiştirin.
Özellik sayfası, Yapılandırma Özellikleri > Gelişmiş > C++ Dinamik Hata Ayıklama'ya açılır. özelliği Evet olarak ayarlanır.
Bu adım,
/dynamicdeopt
anahtarını derleyiciye ve bağlayıcıya ekler. Arka planda, C++ iyileştirme anahtarları/GL
ve/OPT:ICF
'i de devre dışı bırakır. Bu ayar, komut satırına el ile eklediğiniz anahtarların veya gibi/O1
ayarlanmış diğer iyileştirme anahtarlarının üzerine yazmaz.Çözümü Derle>Yeniden Derle öğesini seçerek yeniden oluşturun. Dinamik hata ayıklama ve tüm program iyileştirmenin uyumsuz olduğunu gösteren derleme tanılama kodu
MSB8088
görüntülenir. Bu hata, tüm program iyileştirmenin (/GL
) derleme sırasında otomatik olarak kapatıldığı anlamına gelir.Proje özelliklerinde tüm program iyileştirmesini el ile kapatabilirsiniz. Yapılandırma Özellikleri>Gelişmiş>Tüm Program İyileştirme'yi seçin ve ayarı Kapalı olarak değiştirin. Şimdi
MSB8088
bir uyarı olarak değerlendirilir, ancak Visual Studio'nun gelecekteki bir sürümünde hata olarak ele alınabilir.Uygulamayı yeniden çalıştırın.
Artık 55. satırdaki kesme noktasına bastığınızda,
i
vej
değerlerini YerelLer penceresinde görürsünüz. Çağrı Yığını penceresi,updateGrid()
'nin optimize edilmediğini ve dosya adınınlife.alt.exe
olduğunu gösterir. Bu alternatif ikili, iyileştirilmiş kodda hata ayıklamak için kullanılır.updateGrid işlevinde bir kesme noktası gösterilir. Çağrı yığını, işlevin optimizasyonunun bozulduğunu ve dosya adının life.alt.exeolduğunu gösterir. Locals penceresi i ve j değerlerini ve işlevdeki diğer yerel değişkenleri gösterir.
İşlev
updateGrid()
, içinde bir kesme noktası ayarladığınızdan isteğe bağlı olarak devre dışıdır. Hata ayıklama sırasında optimize edilmiş bir işlevin üzerinden geçerseniz, bu işlev deoptimize olmaz. Bir işleve girerseniz, bu işlev deoptimize edilir. Bir işlevin optimizasyon kaybına uğramasının ana yolu, içinde bir kesme noktası ayarlamanız veya işlevin içine adım adım girmenizdir.Çağrı Yığını penceresinde bir fonksiyonun optimizasyonunu da kaldırabilirsiniz. İşleve veya seçili bir işlev grubuna sağ tıklayın ve sonraki girişte optimizasyonunu kaldır seçin. Bu özellik, çağrı yığınının başka bir yerinde kesme noktası ayarlamadığınız iyileştirilmiş bir işlevde yerel değişkenleri görüntülemek istediğinizde kullanışlıdır. Bu şekilde dez-optimize edilmiş işlevler Kesme Noktaları penceresinde, Dez-Optimize Edilmiş İşlevler adlı bir kesme noktası grubu olarak gruplandırılır. Kesme noktası grubunu silerseniz, ilişkili işlevler iyileştirilmiş durumlarına geri döner.
Koşullu ve bağımlı kesme noktaları kullanma
19. satırda,
cout << (grid[i][j] ? '*' : ' ');
içindeprintGrid()
kesme noktası ayarlamayı yeniden deneyin. Şimdi işe yarıyor. Fonksiyona bir kesme noktası ayarlamak, fonksiyonun optimize edilmesini azaltarak onu normal şekilde hata ayıklamanızı sağlar.19. satırdaki kesme noktasına sağ tıklayın, Koşullar'ı seçin ve koşulu olarak
i == 10 && j== 10
ayarlayın. Ardından Yalnızca aşağıdaki kesme noktasına isabet edildiğinde etkinleştir: onay kutusunu seçin. Açılan listeden 55. satırdaki kesme noktasını seçin. 19. satırdaki kesme noktası, önce 50. satırdaki kesme noktasına, sonra konsola çıkış yapmak üzere olanagrid[10][10]
kadar isabet etmez.Önemli olan, iyileştirilmiş bir işlevde koşullu ve bağımlı kesme noktaları ayarlayabilir ve iyileştirilmiş bir derlemede hata ayıklayıcının kullanılamayabileceği yerel değişkenleri ve kod satırlarını kullanabilirsiniz.
19. satırda koşullu durma noktası gösterilmektedir, cout < < (kılavuz[i][j] ? '*' : ' ');. Koşul i == 10 && j== 10 olarak ayarlanır. Yalnızca aşağıdaki kesme noktasına isabet edildiğinde etkinleştir onay kutusu seçilidir. Kesme noktası açılır listesi, life.cpp dosyasında satır 55'e ayarlanmıştır.
Uygulamayı çalıştırmaya devam edin. 19. satırdaki kesme noktasına ulaşıldığında, 15. satıra sağ tıklayıp Sonraki Deyimi Ayarla'yı seçerek döngünün yeniden çalıştırılmasını sağlayabilirsiniz.
19. satırda bir koşullu ve bağımlı duraklama noktası etkinleştirildi, cout < < (ızgara[i][j] ? '*' : ' ');. Locals penceresi i ve j değerlerini ve işlevdeki diğer yerel değişkenleri gösterir. Çağrı Yığını penceresi, işlevin optimizasyonunun geri alındığını ve dosya adının life.alt.exeolduğunu göstermektedir.
Optimizasyon edilmemiş işlevleri, iyileştirilmiş durumlarına döndürmek için tüm kesme noktalarını silin. Visual Studio ana menüsünde Hata Ayıkla>Tüm Kesme Noktalarını Sil'i seçin. Ardından tüm işlevler iyileştirilmiş durumlarına döner.
Eğer bu kılavuzda yapmadığımız, Çağrı Yığını penceresindeki Bir Sonraki Girişte Deoptimize seçeneği aracılığıyla kesme noktaları eklerseniz, Deoptimize Edilmiş İşlevler grubuna sağ tıklayıp Sil seçeneğini seçerek yalnızca bu gruptaki işlevleri yeniden optimize edilmiş durumlarına döndürebilirsiniz.
Kesme Noktaları penceresi, Deoptimize Edilmiş İşlevler grubunu gösterir. Grup seçilir ve Bağlam menüsü açılır ve Kesme Noktası Grubunu Sil seçili durumdadır.
C++ Dinamik Hata Ayıklamayı kapatma
İyileştirilmiş kodun hata ayıklamasını, kodun yeniden optimize edilmesini engellemeden yapmanız veya iyileştirilmiş koda bir kesme noktası yerleştirmeniz ve kesme noktası geldiğinde kodun optimize halde kalmasını sağlamanız gerekebilir. Bir kesme noktasına ulaştığınızda Dinamik Hata Ayıklamayı kapatmanın veya kodun optimizasyonunu bozulmasını engellemenin birkaç yolu vardır:
- Visual Studio ana menüsünde Araçlar>Seçenekler>Hata Ayıklama Genel'i> seçin. Mümkün olduğunda hata ayıklanmış işlevlerin optimizasyonunu otomatik olarak kaldır (.NET 8+, C++ Dinamik Hata Ayıklama) onay kutusunu temizleyin. Hata ayıklayıcı bir sonraki başlatışında kod iyileştirilmiş olarak kalır.
- Birçok dinamik hata ayıklama kesme noktası, iki farklı kesme noktası içerir: biri optimize edilmiş ikili kodda, diğeri ise optimize edilmemiş ikili kodda.
Kesme Noktaları penceresinde Sütunları> Gösterİşlevi'ni seçin. İkili dosyayla
alt
ilişkili kesme noktasını temizleyin. Çiftteki diğer kesme noktası optimize edilmiş kodda kırılır. - Hata ayıklarken Visual Studio ana menüsündeWindows>Ayrıştırma> seçin. Odaklandığından emin olun. Disassembly penceresi aracılığıyla bir işlevin içine adım attığınızda, işleve optimizasyon uygulanmaz.
- dinamik hata ayıklamayı tamamen devre dışı bırakmak için
/dynamicdeopt
,cl.exe
,lib.exe
velink.exe
'ye geçirmeyin. Üçüncü taraf kütüphaneleri kullanıyorsanız ve bunları yeniden oluşturamıyorsanız, bu ikili dosya için Dinamik Hata Ayıklama'yı devre dışı bırakmak için son/dynamicdeopt
sırasındalink.exe
ögesini geçirmeyin. - Tek bir ikili dosya için Dinamik Hata Ayıklamayı hızla devre dışı bırakmak için (örneğin,
test.dll
), ikiliyi yeniden adlandırınalt
veya silin (örneğin,test.alt.dll
). - Bir veya daha fazla
.cpp
dosyası için Dinamik Hata Ayıklama'yı devre dışı bırakmak amacıyla, oluşturma sırasında/dynamicdeopt
'i dahil etmeyin. Projenizin geri kalanı Dinamik Hata Ayıklama ile inşa edilmiştir.
Unreal Engine'de C++ Dinamik Hata Ayıklamayı Etkinleştirme
Unreal Engine 5.6, hem Unreal Build Tool hem de Unreal Build Accelerator için C++ Dinamik Hata Ayıklamayı destekler. Etkinleştirmenin iki yolu vardır:
Projenizin
Target.cs
dosyasını içerecekWindowsPlatform.bDynamicDebugging = true
şekilde değiştirin.Geliştirme Düzenleyicisi yapılandırmasını kullanın ve şunları içerecek şekilde değiştirin
BuildConfiguration.xml
:<WindowsPlatform> <bDynamicDebugging>true</bDynamicDebugging> </WindowsPlatform>
Unreal Engine 5.5 veya önceki sürümler için GitHub'dan Unreal Build Tool değişikliklerini deponuza seçip alın. Ardından yukarıda gösterildiği gibi etkinleştirin bDynamicDebugging
. Ayrıca, Unreal Engine 5.6'dan Unreal Build Accelerator kullanmanız gerekir. Ya ue5-main'dan en son parçaları kullanın ya da aşağıdakileri BuildConfiguration.xml
öğesine ekleyerek UBA'yı devre dışı bırakın.
<BuildConfiguration>
<bAllowUBAExecutor>false</bAllowUBAExecutor>
<bAllowUBALocalExecutor>false</bAllowUBALocalExecutor>
</BuildConfiguration>
Unreal Engine'in nasıl derlendiğini yapılandırma hakkında daha fazla bilgi için bkz. Derleme Yapılandırması.
Sorun giderme
Kesme noktaları optimize edilmemiş işlevlerde isabet vermezse:
Bir
[Deoptimized]
çerçeveden çıkarsanız, çağıran içinde bir kesme noktası varsa deoptimize edilmiş olmadıkça veya geçerli işlevinize giderken çağıranın içine adım atmadığınız sürece optimize edilmiş bir kodda olabilirsiniz.alt.exe
vealt.pdb
dosyalarının derlenmiş olduğundan emin olun.test.exe
vetest.pdb
için,test.alt.exe
vetest.alt.pdb
aynı dizinde bulunmalıdır. Doğru derleme anahtarlarının bu makaleye göre ayarlandığından emin olun.debug directory
Hata ayıklayıcının, Deoptimize Edilmiş Hata Ayıklama için kullanılacak ikiliyi bulmak üzere kullandığı bir girdi vartest.exe
. Bir x64-doğal Visual Studio komut istemi açın ve birlink /dump /headers <your executable.exe>
girdi olup olmadığını görmek içindeopt
komutunu çalıştırın.deopt
Bu örneğin son satırında gösterildiği gibi sütunda bir girdi görüntülenirType
:Debug Directories Time Type Size RVA Pointer -------- ------- -------- -------- -------- 67CF0DA2 cv 30 00076330 75330 Format: RSDS, {7290497A-E223-4DF6-9D61-2D7F2C9F54A0}, 58, D:\work\shadow\test.pdb 67CF0DA2 feat 14 00076360 75360 Counts: Pre-VC++ 11.00=0, C/C++=205, /GS=205, /sdl=0, guardN=204 67CF0DA2 coffgrp 36C 00076374 75374 67CF0DA2 deopt 22 00076708 75708 Timestamp: 0x67cf0da2, size: 532480, name: test.alt.exe
Hata ayıklama dizini girdisi
deopt
yoksa,/dynamicdeopt
'yicl.exe
,lib.exe
velink.exe
'ye geçirdiğinizi onaylayın.Dinamik Deoptimization,
/dynamicdeopt
tümcl.exe
,lib.exe
ve ikili dosyalar içinlink.exe
,.cpp
ve.lib
'e geçirilmezse tutarlı bir şekilde çalışmaz. Projenizi oluştururken uygun ayarların yapılmış olduğunu onaylayın.
Bilinen sorunlar hakkında daha fazla bilgi için bkz. C++ Dinamik Hata Ayıklama: İyileştirilmiş Derlemeler için Tam Hata Ayıklama.
İşler beklendiği gibi çalışmıyorsa Geliştirici Topluluğu'nda bir bilet açın. Sorun hakkında mümkün olduğunca çok bilgi ekleyin.
Genel notlar
IncrediBuild 10.24, C++ Dinamik Hata Ayıklama derlemelerini destekler.
FastBuild v1.15, C++ Dinamik Hata Ayıklama derlemelerini destekler.
Çizili işlevler isteğe bağlı olarak kullanımdan kaldırılır. Satır içine alınmış bir işlevde kesme noktası belirlerseniz, hata ayıklayıcı işlevi ve çağıranı deoptimize eder. Kesme noktası, programınız derleyici iyileştirmeleri olmadan oluşturulmuş gibi beklediğiniz noktaya denk gelir.
Bir işlev, içindeki kesme noktalarını devre dışı bıraksanız bile yine de optime edilmez. İşlevin iyileştirilmiş durumuna geri dönmek için kesme noktasını kaldırmanız gerekir.
Birçok dinamik hata ayıklama kesme noktası, iki farklı kesme noktası içerir: biri optimize edilmiş ikili kodda, diğeri ise optimize edilmemiş ikili kodda. Bu nedenle Kesme Noktaları penceresinde birden fazla kesme noktası görürsünüz.
İyileştirilmemiş sürüm için kullanılan derleyici bayrakları, iyileştirilmiş sürüm için kullanılan bayraklarla aynıdır; yalnızca iyileştirme bayrakları ve /dynamicdeopt
hariç tutulur. Bu davranış, makroları tanımlamak için ayarladığınız tüm bayrakların deoptimize edilmiş sürümde de ayarlandığı anlamına gelir.
Deoptimize edilmiş kod, hata ayıklama koduyla aynı değildir. Deoptimize edilen kod, iyileştirilmiş sürümle aynı iyileştirme bayraklarıyla derlenir, bu nedenle doğrulamalar ve hata ayıklamaya özgü ayarları kullanan diğer kodlar dahil değildir.
Derleme sistemi tümleştirmesi
C++ Dinamik Hata Ayıklama, derleyici ve bağlayıcı bayraklarının belirli bir şekilde ayarlanmasını gerektirir. Aşağıdaki bölümlerde, çakışan anahtarları olmayan Dinamik Hata Ayıklama için ayrılmış bir yapılandırmanın nasıl ayarlanacağı açıklanmaktadır.
Projeniz Visual Studio derleme sistemiyle oluşturulduysa, Dinamik Hata Ayıklama yapılandırması oluşturmanın iyi bir yolu, Configuration Manager'ı kullanarak Sürüm veya Hata Ayıklama yapılandırmanızı kopyalamak ve Dinamik Hata Ayıklamaya uyum sağlamak için değişiklikler yapmaktır. Aşağıdaki iki bölümde yordamlar açıklanmaktadır.
Yeni Sürüm yapılandırması oluşturma
Visual Studio ana menüsünde Derle>Yapılandırma Yöneticisi'ni seçerek Yapılandırma Yöneticisi'ni açın.
Yapılandırma açılır listesini seçin ve ardından <Yeni...> öğesini seçin.
Configuration Manager'da, Proje bağlamları'nın altında Yapılandırma açılan listesi açılır ve
vurgulanır. Yeni Çözüm Yapılandırması iletişim kutusu açılır. Ad alanına yeni yapılandırma için gibi
ReleaseDD
bir ad girin. Kopyalama ayarlarının Yayın olarak ayarlandığından emin olun: Ardından tamam'ı seçerek yeni yapılandırmayı oluşturun.Ad alanı ReleaseDD olarak ayarlanır. 'Ayarları şuradan kopyala' açılır listesi Yayın üzerine ayarlanmıştır.
Yeni yapılandırma Etkin çözüm yapılandırması açılan listesinde görünür. Kapat'ıseçin.
Yapılandırma açılan listesi ReleaseDD olarak ayarlandığında, Çözüm Gezgini'nde projenize sağ tıklayın ve Özellikler'i seçin.
Yapılandırma Özellikleri>Gelişmiş bölümünde C++ Dinamik Hata Ayıklama kullan'ıEvet olarak ayarlayın.
Tüm Program İyileştirme'ninHayır olarak ayarlandığından emin olun.
Özellik sayfası, Gelişmiş > Yapılandırma Özellikleri'ne açılır. C++ Dinamik Hata Ayıklamayı kullanın. özelliği Evet olarak ayarlanır. Tüm Program İyileştirmesi Hayır olarak ayarlanır.
Yapılandırma Özellikleri>Bağlayıcı>İyileştirmesi'ndeCOMDAT katlama özelliğini etkinleştir seçeneğinin Hayır (/OPT:NOICF) olarak ayarlandığından emin olun.
Özellik sayfası, Yapılandırma Özellikleri > Bağlayıcı > İyileştirme > CMDAT Katlamayı Etkinleştir olarak açılır. özelliği Hayır (/OPT:NOICF) olarak ayarlanır.
Bu ayar, /dynamicdeopt
anahtarını derleyiciye ve bağlayıcıya ekler. C++ iyileştirme anahtarları /GL
ve /OPT:ICF
ayrıca kapalıyken artık C++ Dinamik Hata Ayıklama ile kullanabileceğiniz iyileştirilmiş bir sürüm derlemesi istediğinizde projenizi yeni yapılandırmada derleyebilir ve çalıştırabilirsiniz.
Perakende derlemelerinizle birlikte kullandığınız diğer anahtarları, Dinamik Hata Ayıklama kullanırken beklediğiniz gibi anahtarların her zaman tam olarak açık veya kapalı olmasını sağlamak için bu yapılandırmaya ekleyebilirsiniz. Dinamik Hata Ayıklama ile kullanmamanız gereken anahtarlar hakkında daha fazla bilgi için bkz. Uyumsuz seçenekler.
Visual Studio'daki yapılandırmalar hakkında daha fazla bilgi için bkz. Yapılandırmaları oluşturma ve düzenleme.
Yeni hata ayıklama yapılandırması oluşturma
Hata ayıklama ikili dosyalarını kullanmak ancak bunların daha hızlı çalışmasını istiyorsanız, Hata ayıklama yapılandırmanızı değiştirebilirsiniz.
Visual Studio ana menüsünde Derle>Yapılandırma Yöneticisi'ni seçerek Yapılandırma Yöneticisi'ni açın.
Yapılandırma açılır listesini seçin ve ardından <Yeni...> öğesini seçin.
Configuration Manager'da, pencerenin Proje bağlamları bölümünde Yapılandırma açılan listesi görünür ve
vurgulanır. Yeni Proje Yapılandırması iletişim kutusu açılır. Ad alanına yeni yapılandırma için DebugDD gibi bir ad girin. Kopyala ayarlarını şundan:Debug olarak ayarlandığından emin olun. Ardından tamam'ı seçerek yeni yapılandırmayı oluşturun.
Ad alanı DebugDD olarak ayarlanır. Kopya ayarları şu kaynaktan: açılan listesi Debug olarak ayarlanır.
Yeni yapılandırma Etkin çözüm yapılandırması açılan listesinde görünür. Kapat'ıseçin.
Yapılandırma açılan listesi DebugDD olarak ayarlandığında, Çözüm Gezgini'nde projenize sağ tıklayın ve Özellikler'i seçin.
Yapılandırma Özellikleri>C/C++>İyileştirme'de istediğiniz iyileştirmeleri açın. Örneğin, İyileştirme'yiMaksimum Hız (/O2) olarak ayarlayabilirsiniz.
C/C++>Kod Oluşturma'daTemel Çalışma Zamanı Denetimleri'yiVarsayılan olarak ayarlayın.
C/C++>Genel'deYalnızca Kod Hata Ayıklamamı Destekle seçeneğini devre dışı bırakın.
Hata Ayıklama Bilgileri BiçiminiProgram Veritabanı (/Zi) olarak ayarlayın.
Dinamik Hata Ayıklama kullanırken beklediğiniz anahtarların her zaman tam olarak açık veya kapalı olması için bu yapılandırmaya hata ayıklama derlemelerinizle birlikte kullandığınız başka anahtarlar ekleyebilirsiniz. Dinamik Hata Ayıklama ile kullanmamanız gereken anahtarlar hakkında daha fazla bilgi için bkz. Uyumsuz seçenekler.
Visual Studio'daki yapılandırmalar hakkında daha fazla bilgi için bkz. Yapılandırmaları oluşturma ve düzenleme.
Özel derleme sistemiyle ilgili dikkat edilmesi gerekenler
Özel bir derleme sisteminiz varsa şunları yaptığınızdan emin olun:
-
/dynamicdeopt
öğesinicl.exe
,lib.exe
velink.exe
öğelerine geçirin. -
/ZI
,/RTC
bayraklarından herhangi birini ya da/JMC
kullanmayın.
Derleme dağıtımcıları için:
-
test
adlı bir proje için derleyicitest.alt.obj
,test.alt.exp
,test.obj
vetest.exp
oluşturur. Bağlayıcıtest.alt.exe
,test.alt.pdb
,test.exe
vetest.pdb
oluşturur. - Yeni araç takımı ikili
c2dd.dll
dosyasınıc2.dll
ile birlikte dağıtmanız gerekir.
Uyumsuz seçenekler
Bazı derleyici ve bağlayıcı seçenekleri C++ Dinamik Hata Ayıklama ile uyumsuz. Visual Studio proje ayarlarını kullanarak C++ Dinamik Hata Ayıklama'yı açarsanız, uyumsuz seçenekler, bunları ek komut satırı seçenekleri ayarında özellikle ayarlamadığınız sürece otomatik olarak kapatılır.
Aşağıdaki derleyici seçenekleri C++ Dinamik Hata Ayıklama ile uyumsuz:
/GH
/GL
/Gh
/RTC1
/RTCc
/RTCs
/RTCu
/ZI (/Zi is OK)
/ZW
/clr
/clr:initialAppDomain
/clr:netcore
/clr:newSyntax
/clr:noAssembly
/clr:pure
/clr:safe
/fastcap
/fsanitize=address
/fsanitize=kernel-address
Aşağıdaki bağlayıcı seçenekleri C++ Dinamik Hata Ayıklama ile uyumsuz:
/DEBUG:FASTLINK
/INCREMENTAL
/OPT:ICF You can specify /OPT:ICF but the debugging experience may be poor
Ayrıca bakınız
/dynamicdeopt derleyici bayrağı (önizleme)
/DYNAMICDEOPT bağlayıcı bayrağı (önizleme)
C++ Dinamik Hata Ayıklama: İyileştirilmiş Derlemeler için Tam Hata Ayıklama Kapasitesi
İyileştirilmiş kodda hata ayıklama