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önetilen hata ayıklama yardımcıları (MDA) çalışma zamanı durumu hakkında bilgi sağlamak için ortak dil çalışma zamanı (CLR) ile çalışan hata ayıklama yardımcılarıdır. Yardımcılar, başka türlü yakalayamayacağınız çalışma zamanı olayları hakkında bilgilendirici iletiler üretir. Yönetilen ve yönetilmeyen kod arasında geçiş yaparken oluşan bulunması zor uygulama hatalarını yalıtmak için MDA'ları kullanabilirsiniz.
Windows kayıt defterine bir anahtar ekleyerek veya bir ortam değişkeni ayarlayarak tüm MDA'ları etkinleştirebilir veya devre dışı bırakabilirsiniz . Uygulama yapılandırma ayarlarını kullanarak belirli MDA'ları etkinleştirebilirsiniz. Uygulamanın yapılandırma dosyasındaki bazı tek MDA'lar için ek yapılandırma ayarları yapabilirsiniz. Çalışma zamanı yüklendiğinde bu yapılandırma dosyaları ayrıştırıldığından, yönetilen uygulama başlamadan önce MDA'yı etkinleştirmeniz gerekir. Zaten başlamış uygulamalar için etkinleştiremezsiniz.
Aşağıdaki tabloda .NET Framework ile birlikte gelen MDA'lar listelenmektedir:
Varsayılan olarak, .NET Framework tüm yönetilen hata ayıklayıcıları için MDA'ların bir alt kümesini etkinleştirir. Hata Ayıklama menüsünde >Özel Durum Ayarları'nı seçip Yönetilen Hata Ayıklama Yardımcıları listesini genişleterek Visual Studio'da varsayılan kümeyi görüntüleyebilirsiniz.
MDA'ları Etkinleştirme ve Devre Dışı Bırakma
Kayıt defteri anahtarı, ortam değişkeni ve uygulama yapılandırma ayarları kullanarak MDA'ları etkinleştirebilir ve devre dışı bırakabilirsiniz. Uygulama yapılandırma ayarlarını kullanmak için kayıt defteri anahtarını veya ortam değişkenini etkinleştirmeniz gerekir.
Tavsiye
MDA'ları devre dışı bırakmak yerine, MDA bildirimi alındığında Visual Studio'nun MDA iletişim kutusunu görüntülemesini engelleyebilirsiniz. Bunu yapmak için Windows>Özel Durum Ayarları seçeneğini Hata Ayıkla menüsünde tercih edin, Yönetilen Hata Ayıklama Yardımcıları listesini genişletin ve ardından her bir MDA için Oluşturulurken Kes onay kutusunu seçin veya temizleyin.
Kayıt Defteri Anahtarı
MDA'ları etkinleştirmek için Windows kayıt defterine HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\MDA alt anahtarını (REG_SZ, değer 1 yazın) ekleyin. Aşağıdaki örneği MDAEnable.reg adlı bir metin dosyasına kopyalayın. Windows Kayıt Defteri Düzenleyicisi'ni (RegEdit.exe) açın ve Dosya menüsünden İçeri Aktar'ı seçin. O bilgisayarda MDA'ları etkinleştirmek için MDAEnable.reg dosyasını seçin. Alt anahtarı 1 dize değerine (DWORD değeri 1 değil) ayarlamak , ApplicationName.suffix.mda.config dosyasından MDA ayarlarının okunmasını sağlar. Örneğin, Not Defteri için MDA yapılandırma dosyası notepad.exe.mda.configolarak adlandırılabilir.
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework]
"MDA"="1"
Bilgisayar 64 bit işletim sisteminde 32 bit bir uygulama çalıştırıyorsa MDA anahtarı aşağıdaki gibi ayarlanmalıdır:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework]
"MDA"="1"
Daha fazla bilgi için Application-Specific Yapılandırma Ayarları'nı inceleyin. Kayıt defteri ayarı ortam değişkeni tarafından COMPLUS_MDA geçersiz kılınabilir. Daha fazla bilgi için bkz . Ortam Değişkeni .
MDA'ları devre dışı bırakmak için Windows Kayıt Defteri Düzenleyicisi'ni kullanarak MDA alt anahtarını 0 (sıfır) olarak ayarlayın.
Varsayılan olarak, bazı MDA'lar, kayıt defteri anahtarını eklemeden bile hata ayıklayıcıya bağlı bir uygulama çalıştırdığınızda etkinleştirilir. Bu bölümde daha önce açıklandığı gibi MDADisable.reg dosyasını çalıştırarak bu yardımcıları devre dışı bırakabilirsiniz.
Ortam değişkeni
MDA etkinleştirmesi, kayıt defteri anahtarını geçersiz kılan ortam değişkeni COMPLUS_MDAtarafından da denetlenebilir. Dize COMPLUS_MDA , MDA adlarının veya diğer özel denetim dizelerinin büyük/küçük harfe duyarlı olmayan, noktalı virgülle ayrılmış bir listesidir. Yönetilen veya yönetilmeyen bir hata ayıklayıcısı altında başlamak, varsayılan olarak bir MDA kümesini etkinleştirir. Bu, hata ayıklayıcılar içinde varsayılan olarak etkinleştirilen noktalı virgülle ayrılan MDA'ların listesini ortam değişkeninin veya kayıt defteri anahtarının değerine dolaylı olarak ön ekleyerek yapılır. Özel denetim dizeleri şunlardır:
0- Tüm MDA'ları devre dışı bırakır.1- ApplicationName.mda.configMDA ayarlarını okur.managedDebugger- Bir hata ayıklayıcı altında yönetilen yürütülebilir dosya başlatıldığında örtük olarak etkinleştirilen tüm MDA'ları açıkça etkinleştirir.unmanagedDebugger- Bir hata ayıklayıcı altında yönetilmeyen yürütülebilir dosya başlatıldığında örtük olarak etkinleştirilen tüm MDA'ları açıkça etkinleştirir.
Çakışan ayarlar varsa, en son ayarlar önceki ayarları geçersiz kılar:
COMPLUS_MDA=0, bir hata ayıklayıcısı altında örtük olarak etkinleştirilenler de dahil olmak üzere tüm MDA'ları devre dışı bırakır.COMPLUS_MDA=gcUnmanagedToManaged, bir hata ayıklayıcı altında örtük olarak etkinleştirilmiş tüm MDA'lara ek olarakgcUnmanagedToManagedetkinleştirir.COMPLUS_MDA=0;gcUnmanagedToManagedetkinkengcUnmanagedToManagedetkinleştirir, ancak hata ayıklayıcı altında normalde örtük olarak etkinleştirilecek MDA'ları devre dışı bırakır.
Application-Specific Yapılandırma Ayarları
Uygulamanın MDA yapılandırma dosyasında bazı yardımcıları tek tek etkinleştirebilir, devre dışı bırakabilir ve yapılandırabilirsiniz. MDA'ları yapılandırmak üzere bir uygulama yapılandırma dosyasının kullanımını etkinleştirmek için MDA kayıt defteri anahtarı veya COMPLUS_MDA ortam değişkeni ayarlanmalıdır. Uygulama yapılandırma dosyası genellikle uygulamanın yürütülebilir dosyasıyla (.exe) aynı dizinde bulunur. Dosya adı ApplicationName.mda.configbiçimindedir; örneğin, notepad.exe.mda.config. Uygulama yapılandırma dosyasında etkinleştirilen yardımcıların, bu yardımcının davranışını denetlemek için tasarlanmış öznitelikleri veya öğeleri olabilir.
Aşağıdaki örnek, marshalling işlemi nasıl etkinleştirileceğini ve yapılandırılacağını göstermektedir.
<mdaConfig>
<assistants>
<marshaling>
<methodFilter>
<match name="*"/>
</methodFilter>
<fieldFilter>
<match name="*"/>
</fieldFilter>
</marshaling>
</assistants>
</mdaConfig>
MDA, Marshaling uygulamadaki her yönetilen-yönetilmeyen geçişinde, yönetilen türün yönetilmeyene dönüştürülmesiyle ilgili bilgileri iletir.
Marshaling MDA ayrıca methodFilter ve fieldFilter alt öğelerinde sağlanan yöntem ve yapı alanlarının adlarını sırasıyla filtreleyebilir.
Aşağıdaki örnekte, varsayılan ayarlarını kullanarak birden çok MDA'nın nasıl etkinleştirileceği gösterilmektedir:
<mdaConfig>
<assistants>
<illegalPrepareConstrainedRegion />
<invalidCERCall />
<openGenericCERCall />
<virtualCERCall />
</assistants>
</mdaConfig>
Önemli
Yapılandırma dosyasında birden fazla yardımcı belirttiğinizde, bunları alfabetik sırada listelemeniz gerekir. Örneğin, hem virtualCERCall hem de invalidCERCall MDA'larını etkinleştirmek istiyorsanız, <invalidCERCall /> girişinden önce <virtualCERCall /> girişini eklemeniz gerekir. Girdiler alfabetik sırada değilse, işlenmeyen geçersiz bir yapılandırma dosyası özel durum iletisi görüntülenir.
MDA istisnaları
MDA etkinleştirildiğinde, kodunuz bir hata ayıklayıcı altında yürütülmediğinde bile etkin olur. Hata ayıklayıcı mevcut olmadığında bir MDA olayı tetiklenirse, işlenmeyen bir özel durum olmasa da, olay iletisi işlenmeyen bir özel durum iletişim kutusunda sunulur. İletişim kutusundan kaçınmak için, kodunuz bir hata ayıklama ortamında yürütülmediğinde MDA etkinleştirme ayarlarını kaldırın.
Kodunuz Visual Studio tümleşik geliştirme ortamında (IDE) yürütürken, belirli MDA olayları için görüntülenen özel durum iletişim kutusundan kaçınabilirsiniz. Bunu yapmak için Hata Ayıkla menüsünde Windows>Özel Durum Ayarları'nı seçin. Özel Durum Ayarları penceresinde, Yönetilen Hata Ayıklama Yardımcıları listesini genişletin ve ardından tek tek Yönetilen Hata Ayıklama Yardımcıları için Oluşturulurken Kes onay kutusunu temizleyin. MDA özel durum iletişim kutularının görüntülenmesini etkinleştirmek için bu iletişim kutusunu da kullanabilirsiniz.
MDA Çıktısı
MDA çıktısı, MDA'dan alınan çıkışı gösteren aşağıdaki örneğe PInvokeStackImbalance benzer:
PInvoke işlevi çağrısı 'MDATest!MDATest.Program::StdCall' yığını dengesizleştirdi. Bunun nedeni büyük olasılıkla yönetilen PInvoke imzasının yönetilmeyen hedef imzayla eşleşmemesidir. PInvoke imzasının çağrı kuralının ve parametrelerinin hedef yönetilmeyen imzayla eşleşip eşleşmediğini denetleyin.