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.
Uyarı
Bu makale .NET Framework'e özgüdür. .NET 6 ve sonraki sürümleri de dahil olmak üzere daha yeni .NET uygulamaları için geçerli değildir.
Yönetilmeyen kod derlerken, IDE anahtarları veya komut satırı seçeneklerini ayarlayarak hata ayıklama için yürütülebilir görüntü yapılandırabilirsiniz. Örneğin, Visual C++ içindeki /Zi komut satırı seçeneğini kullanarak hata ayıklama sembol dosyalarını (.pdb dosya uzantısı) yaymalarını isteyebilirsiniz. Benzer şekilde, /Od komut satırı seçeneği derleyiciye iyileştirmeyi devre dışı bırakmasını söyler. Sonuçta elde edilen kod daha yavaş çalışır, ancak bu gerekli olduğunda hata ayıklaması daha kolaydır.
.NET Framework yönetilen kodu derlenirken Visual C++, Visual Basic ve C# gibi derleyiciler kaynak programlarını ortak ara dilde (CIL) derler. CIL, yerel makine kodunda yürütülmeden hemen önce JIT ile derlenmiş olur. Yönetilmeyen kodda olduğu gibi, IDE anahtarları veya komut satırı seçeneklerini ayarlayarak hata ayıklama için yürütülebilir bir görüntü yapılandırabilirsiniz. Hata ayıklama için JIT derlemesini de aynı şekilde yapılandırabilirsiniz.
Bu JIT yapılandırmasının iki yönü vardır:
JIT derleyicisinin izleme bilgileri oluşturmasını isteyebilirsiniz. Bu, hata ayıklayıcının CIL zincirini makine koduna karşılık gelen zincirle eşleştirmesini ve yerel değişkenlerin ve işlev bağımsız değişkenlerinin nerede depolandığını izlemesini mümkün kılar. .NET Framework sürüm 2.0 ve sonraki sürümlerde JIT derleyicisi her zaman izleme bilgileri oluşturur, bu nedenle istemeye gerek yoktur.
JIT derleyicisinin sonuçta elde edilen makine kodunu iyileştirmemesi için istekte bulunabilirsiniz.
Normalde, CIL'yi oluşturan derleyici, belirttiğiniz IDE anahtarları veya komut satırı seçeneklerine (örneğin, /Od) bağlı olarak bu JIT derleyici seçeneklerini uygun şekilde ayarlar.
Bazı durumlarda, oluşturduğu makine kodunun hata ayıklamasını kolaylaştırmak için JIT derleyicisinin davranışını değiştirmek isteyebilirsiniz. Örneğin, perakende derlemesi veya denetim iyileştirmesi için JIT izleme bilgileri oluşturmak isteyebilirsiniz. Bunu bir başlatma (.ini) dosyasıyla yapabilirsiniz.
Örneğin, hata ayıklamak istediğiniz derleme MyApp.exeolarak adlandırılırsa, MyApp.exeile aynı klasörde şu üç satırı içeren MyApp.iniadlı bir metin dosyası oluşturabilirsiniz:
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
Her seçeneğin değerini 0 veya 1 olarak ayarlayabilirsiniz ve olmayan seçenekler varsayılan olarak 0'dır.
GenerateTrackingInfo'ı 1 ve AllowOptimize'i 0 olarak ayarlamak, en kolay hata ayıklamayı sağlar.
.NET Framework 2.0'dan başlayarak, JIT derleyicisi her zaman için GenerateTrackingInfodeğerinden bağımsız olarak izleme bilgileri oluşturur; ancak değerin AllowOptimize etkisi devam eder. Optimizasyon uygulanmadan yerel görüntüyü ön derlemek için Ngen.exe (Yerel Görüntü Oluşturucu) kullanıldığında, Ngen.exe yürütüldüğünde .ini dosyasının AllowOptimize=0 ile hedef klasörde bulunduğundan emin olunmalıdır. İyileştirme olmadan bir derlemeyi önceden derlediyseniz, kodu iyileştirilmiş olarak önceden derlemek için Ngen.exe yeniden çalıştırmadan önce NGen.exe /uninstall seçeneğini kullanarak önceden derlenmiş kodu kaldırmanız gerekir. .ini dosyası klasörde yoksa, varsayılan olarak Ngen.exe kodu iyileştirilmiş olarak önceden derlenir.
System.Diagnostics.DebuggableAttribute bir derlemenin ayarlarını denetler.
DebuggableAttribute , JIT derleyicisinin izleme bilgilerini iyileştirmesi ve/veya oluşturması gerekip gerekmediğini denetleyebilen iki alan içerir. .NET Framework 2.0 ve sonraki sürümlerinde JIT derleyicisi her zaman izleme bilgileri oluşturur.
Perakende derlemesi için derleyiciler DebuggableAttribute ayarlamaz. Varsayılan olarak, JIT derleyicisi makine kodunda hata ayıklaması en zor olan en yüksek performansı oluşturur. JIT izlemenin etkinleştirilmesi performansı biraz düşürür ve iyileştirmeyi devre dışı bırakmak performansı çok düşürür.
, DebuggableAttribute derleme içindeki tek tek modüller için değil, aynı anda bütün bir bütünleştirilmiş kod için geçerlidir. Bu nedenle geliştirme araçlarının derleme meta veri belirtecine, bir derleme zaten oluşturulduysa veya System.Runtime.CompilerServices.AssemblyAttributesGoHere adlı sınıfa özel öznitelikler eklemesi gerekir. Ardından ALink aracı bu DebuggableAttribute öznitelikleri her modülden alarak bir parçası oldukları derlemeye yükseltir. Çakışma olursa, ALink işlemi başarısız olur.
Uyarı
.NET Framework'ün 1.0 sürümünde, Microsoft Visual C++ derleyicisi DebuggableAttribute ve /Zi derleyici seçenekleri belirtildiğinde öğesini ekler. .NET Framework'ün 1.1 sürümünde, kodunuza DebuggableAttribute öğesini el ile eklemeniz veya /ASSEMBLYDEBUG bağlayıcı seçeneğini kullanmanız gerekir.