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.
Visual Studio hata ayıklayıcısı , QuickWatch iletişim kutusuna, gözcü penceresine veya Anlık pencereye bir ifade girdiğinizde çalışan ifade değerlendiricileri içerir. İfade değerlendiricileri, Kesme Noktaları penceresinde ve hata ayıklayıcıdaki birçok başka yerde de çalışır.
Aşağıdaki bölümlerde, Visual Studio tarafından desteklenen diller için ifade değerlendirmesinin sınırlamaları açıklanmaktadır.
F# ifadeleri desteklenmiyor
F# ifadeleri tanınmıyor. F# kodunda hata ayıklarsanız, ifadeleri hata ayıklayıcı penceresine veya iletişim kutusuna girmeden önce ifadelerinizi C# söz dizimine çevirmeniz gerekir. İfadeleri F# yerine C# olarak çevirdiğinizde, C# öğesinin eşitliği test etmek için işlecini == , F# ise tek =öğesini kullandığını unutmayın.
C++ İfadeleri
C++ dilinde ifadelerle bağlam işleçlerini kullanma hakkında bilgi için bkz. Bağlam İşleci (C++).
C++ dilinde Desteklenmeyen İfadeler
Oluşturucular, yıkıcılar ve dönüştürmeler
Bir nesne için bir oluşturucuyu veya yıkıcıyı açıkça veya örtük olarak çağıramazsınız. Örneğin, aşağıdaki ifade açıkça bir oluşturucu çağırır ve bir hata iletisiyle sonuçlanır:
my_date( 2, 3, 1985 )
Dönüştürmenin hedefi bir sınıfsa dönüştürme işlevini çağıramazsınız. Böyle bir dönüştürme, bir nesnenin oluşturulmasını içerir. Örneğin, myFraction bir örnekse ve CFraction'i tanımlayan dönüştürme işlevi operatörü FixedPoint olarak işlev görüyorsa, aşağıdaki ifade bir hatayla sonuçlanır:
(FixedPoint)myFraction
Yeni veya silme işleçlerini çağıramazsınız. Örneğin, aşağıdaki ifade desteklenmez:
new Date(2,3,1985)
Önişlemci Makroları
Önişlemci makroları hata ayıklayıcıda desteklenmez. Örneğin, bir sabit VALUE#define VALUE 3 şeklinde bildirilirse, VALUEWatch penceresinde kullanamazsınız. Bu sınırlamayı önlemek için `#define`'leri mümkün olduğunca enumlar ve işlevlerle değiştirmelisiniz.
ad alanı bildirimlerini kullanma
Bildirimleri using namespace kullanamazsınız. Geçerli ad alanının dışındaki bir tür adına veya değişkene erişmek için tam adı kullanmanız gerekir.
Anonim ad alanları
Anonim ad alanları desteklenmez. Aşağıdaki koda sahipseniz izleme penceresine ekleyemezsiniz test :
namespace mars
{
namespace
{
int test = 0;
}
}
int main()
{
// Adding a watch on test doesn't work.
mars::test++;
return 0;
}
Durumu korumak için hata ayıklayıcı iç işlevlerini kullanma
Hata ayıklayıcı iç işlevleri, uygulamanın durumunu değiştirmeden ifadelerde belirli C/C++ işlevlerini çağırmanız için bir yol sağlar.
Hata ayıklayıcısı iç işlevleri:
Güvenli olması garanti edilir: bir hata ayıklayıcı iç işlevinin yürütülmesi, hata ayıklanan işlemi bozmaz.
Yan etkilere ve işlev değerlendirmesine izin verilmeyen senaryolarda bile tüm ifadelerde izin verilir.
Mini hata ayıklama gibi normal işlev çağrılarının mümkün olmadığı senaryolarda çalışın.
Hata ayıklayıcısı iç işlevleri de ifadeleri değerlendirmeyi daha kullanışlı hale getirir. Örneğin,
strcmp(str, "asd")kesme noktası koşulundastr[0] == 'a' && str[1] == 's' && str[2] == 'd''e göre yazması çok daha kolaydır. )
| Area | İç işlevler |
|---|---|
| Dize uzunluğu | strlen, wcslen, strnlen, wcsnlen |
| Dize karşılaştırması | strcmp, wcscmp, stricmp, wcsicmp, _stricmp, _strcmpi, _wcsicmp, _wcscmpi, strncmp, wcsncmp, strnicmp, wcsnicmp, _strnicmp, _wcsnicmp |
| Dize araması | strchr, wcschr, memchr, wmemchr, strstr, wcsstr |
| Win32 | CoDecodeProxy, DecodePointer, GetLastError, TlsGetValue |
| Windows 8 |
RoInspectCapturedStackBackTrace, WindowsCompareStringOrdinal, WindowsGetStringLen, WindowsGetStringRawBuffer Bu işlevler, hata ayıklanan işlemin Windows 8'de çalıştırılmasını gerektirir. Bir Windows 8 cihazından oluşturulan döküm dosyalarında hata ayıklama, Visual Studio bilgisayarının Windows 8 çalıştırmasını da gerektirir. Ancak, bir Windows 8 cihazında uzaktan hata ayıklarsanız, Visual Studio bilgisayarı Windows 7 çalıştırıyor olabilir. WindowsGetStringLen ve WindowsGetStringRawBuffer yalnızca kaynak düzeyinde yürütme altyapısı (EE) tarafından kullanılır. |
| Miscellaneous |
__log2 - Belirtilen tamsayıya ait günlük tabanı 2'yi en yakın alt tamsayıya yuvarlanmış olarak döndürür. __findNonNull - null olmayan ilk öğenin dizinini döndüren bir işaretçi dizisini arar. - Parametreler: (1) Dizideki ilk öğeye yönelik işaretçi (void*), (2) Dizinin boyutu (işaretsiz int). - Dönüş değerleri: (1) Dizinin ilk null olmayan öğesinin 0 tabanlı dizini veya böyle bir öğe bulunamazsa -1. DecodeHString - HSTRING değerini biçimlendirmek için yardımcı işlev. HSTRING değerini yığından çıkartır, EE'nin dizenin nerede olduğunu belirlemek için kullanabileceği StringInfo yapısının baytlarını yığar. Bu yalnızca EE tarafından dahili olarak kullanılır; kullanıcı tarafından doğrudan aranamaz. DecodeWinRTRestrictedException - Kısıtlanmış açıklamayı almak için WinRT kısıtlanmış özel durumunun kodunu çözer. - Parametreler: (1) kısıtlanmış başvuru dizesini temsil eden null ile sonlandırılan bir dizenin karakterleri. - Dönüş değeri: Gösterilecek gerçek hata iletisini içeren null olarak sonlandırılan dizenin karakterleri. DynamicCast - dynamic_cast uygular. - Parametreler: (1) Nesnenin atamasına yönelik işaretçi. - Veri öğeleri: CDynamicCastData nesnesi, ilgili ExecuteIntrinsic() yönergesine bir veri öğesi olarak ilişkilendirilmelidir. Veri öğesi, aktardığımız ve aktardığımız türü kodlar, ayrıca bir natvis ifadesini değerlendirip değerlendirmediğimizi de belirler (bu, sonsuz özyinelemenin kesilmesi için tanılama açısından gereklidir). - Dönüş değeri: (1) Nesneye yönelik bir işaretçi, doğru türe yayınlanıyor veya nesne doğru türün bir örneği değilse NULL. DynamicMemberLookup - Bir sınıf üyesinin değerini dinamik olarak almak için yardımcı işlev GetEnvBlockLength - Bir ortam bloğunun uzunluğunu karakter olarak almak için yardımcı işlev. $env için kullanılır. Stdext_HashMap_Int_OperatorBracket_idx - stdext::hash_map için Operatör[]. Varsayılan karma işlevini 'int' anahtarıyla varsayar. Değeri döndürür. İç işleç[] yalnızca karma tablodan var olan öğelerin alınmasını destekler; bellek ayırma gibi istenmeyen karmaşıklık içerebileceği için tabloya yeni öğeler eklemeyi desteklemez. Ancak, işleç[] tabloda zaten bir anahtarla ilişkili değeri değiştirmek için kullanılabilir. - Yığın Parametreleri: (1) stdext::hash_map nesnesinin adresi, (2) Tablodaki anahtar (int), (3) işlev uygulamasının aramayı yapmak için ihtiyaç duyduğu üyelerin alan uzaklıklarını belirten bir HashMapPdb yapısı. Uzak tarafta simgelere doğrudan erişim sağlanamadığı için bu gereklidir. - Dönüş değerleri: (1) Anahtar tablodaysa, anahtara karşılık gelen değerin adresi. Aksi takdirde NULL. Std_UnorderedMap_Int_OperatorBracket_idx - std::unordered_map, karma işlevi farklı olması dışında stdext::hash_map ile aynı şekilde çalışır. ConcurrencyArray_OperatorBracket_idx // Concurrency::array<>::operator[index<>] ve operator(index<>) ConcurrencyArray_OperatorBracket_int // Concurrency::array<>::operator(int, int, ...) ConcurrencyArray_OperatorBracket_tidx // Concurrency::array<>::operator[tiled_index<>] ve operator(tiled_index<>) ConcurrencyArrayView_OperatorBracket_idx // Concurrency::array_view<>::operator[index<>] ve operator(index<>) ConcurrencyArrayView_OperatorBracket_int // Eşzamanlılık::array_view<>::operator(int, int, ...) ConcurrencyArrayView_OperatorBracket_tidx // Eşzamanlılık::array_view<>::operator[tiled_index<>] ve işleç(tiled_index<>) TreeTraverse_Init - Yeni bir ağaç geçişini başlatır. .natvis dosyalarında kullanılmak üzere tasarlanmamış uzantı tabanlı görselleştiricileri destekler. TreeTraverse_Next - Yapılacak ağaç geçişindeki düğümleri alır. .natvis dosyalarında kullanılmak üzere tasarlanmamış uzantı tabanlı görselleştiricileri destekler. TreeTraverse_Skip - Beklemede olan bir ağaç geçişindeki düğümleri atlar. .natvis dosyalarında kullanılmak üzere tasarlanmamış uzantı tabanlı görselleştiricileri destekler. |
C++/CLI - Desteklenmeyen İfadeler
İşaretçiler veya kullanıcı tanımlı atamalar içeren atamalar desteklenmez.
Nesne karşılaştırması ve ataması desteklenmez.
Aşırı yüklenmiş işleçler ve aşırı yüklenmiş işlevler desteklenmez.
Kutulama ve kutu açma desteklenmez.
Sizeofişleci desteklenmez.
C# - Desteklenmeyen İfadeler
Dinamik Nesneler
Statik olarak dinamik olarak yazılan hata ayıklayıcı ifadelerinde değişkenleri kullanabilirsiniz. Uygulayan IDynamicMetaObjectProvider nesneler İzleme penceresinde değerlendirildiğinde Dinamik Görünüm düğümü eklenir. Dinamik Görünüm düğümü nesne üyelerini gösterir ancak üyelerin değerlerini düzenlemeye izin vermez.
Dinamik nesnelerin aşağıdaki özellikleri desteklenmez:
Bileşik işleçler
+=,-=,%=,/=ve*=Sayısal atamalar ve tür bağımsız değişken atamaları dahil olmak üzere birçok tür ataması
İkiden fazla bağımsız değişken içeren yöntem çağrıları
İkiden fazla bağımsız değişkeni olan özellik alıcıları
Bağımsız değişkenler içeren özellik ayarlayıcıları
Dizin oluşturucuya atama
Boole işleçleri
&&ve||
Anonim Yöntemler
Yeni anonim yöntemlerin oluşturulması desteklenmez.
Visual Basic - Desteklenmeyen İfadeler
Dinamik Nesneler
Statik olarak dinamik olarak yazılan hata ayıklayıcı ifadelerinde değişkenleri kullanabilirsiniz. uygulayan IDynamicMetaObjectProvider nesneler İzleme penceresinde değerlendirildiğinde Dinamik Görünüm düğümü eklenir. Dinamik Görünüm düğümü nesne üyelerini gösterir ancak üyelerin değerlerini düzenlemeye izin vermez.
Dinamik nesnelerin aşağıdaki özellikleri desteklenmez:
Bileşik işleçler
+=,-=,%=,/=ve*=Sayısal atamalar ve tür bağımsız değişken atamaları dahil olmak üzere birçok tür ataması
İkiden fazla bağımsız değişken içeren yöntem çağrıları
İkiden fazla bağımsız değişkeni olan özellik alıcıları
Bağımsız değişkenler içeren özellik ayarlayıcıları
Dizin oluşturucuya atama
Boole işleçleri
&&ve||
Yerel Sabitler
Yerel sabitler desteklenmez.
Takma Adları İçe Aktar
İçe aktarma takma adları desteklenmiyor.
Değişken Bildirimleri
Hata ayıklayıcı pencerelerinde açık yeni değişkenler bildiremezsiniz. Ancak , Anında penceresinde yeni örtük değişkenler atayabilirsiniz. Bu örtük değişkenlerin kapsamı hata ayıklama oturumu olarak belirlenmiştir ve hata ayıklayıcının dışından erişilemez. Örneğin, deyimi o = 5 örtük olarak yeni bir değişken o oluşturur ve buna 5 değerini atar. Bu tür örtük değişkenler, tür hata ayıklayıcı tarafından çıkarılamadığı sürece Object türündedir.
Desteklenmeyen Anahtar Sözcükler
AddressOfEndErrorExitGotoOn ErrorResumeReturnSelect/CaseStopSyncLockThrowTry/Catch/FinallyWithAd alanı veya modül düzeyi anahtar sözcükleri, örneğin
End SubveyaModule.