Visual Studio hata ayıklayıcıdaki ifadeler
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 diğer birçok 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, dönüştürme işlevi işlecini FixedPoint
tanımlayan bir örneğiyse myFraction
CFraction
, 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
şu şekilde bildirilirse gözcü penceresinde kullanamazsınız VALUE
. #define VALUE 3
Bu sınırlamayı önlemek için, mümkün olduğunca 'leri sabit listeleri ve işlevlerle değiştirmelisiniz #define
.
ad alanı bildirimlerini kullanma
Bildirimleri kullanamazsınız using namespace
. 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,
strncmp(str, "asd")
kesme noktası koşulunda yazmak değerinden çok dahastr[0] == 'a' && str[1] == 's' && str[2] == 'd'
kolaydır. )
Alan | İç 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. |
Çeşitli | __log2 - Belirtilen tamsayının günlük tabanı 2'sini 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) dizideki ilk null olmayan öğenin 0 tabanlı dizini veya bulunamazsa -1. DecodeHString - HSTRING değerini biçimlendirmek için yardımcı işlev. HSTRING değerini yığından açar, EE'nin dizenin nerede olduğunu söylemek için kullanabileceği stringInfo yapısının baytlarını gönderir. 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, bir natvis ifadesini değerlendirip değerlendirmediğimize (sonsuz özyinelemenin kesilmesi için tanılama için gereklidir) yanı sıra ve öğesinden türe aktardığımız türü kodlar. - 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 İşleç[] . Varsayılan karma işlevini 'int' anahtarıyla varsayar. Değeri verir. İç 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şi başlatır. .natvis dosyalarında kullanılmak üzere tasarlanmamış uzantı tabanlı görselleştiricileri destekler. TreeTraverse_Next - Bekleyen ağaç geçişindeki düğümleri alır. .natvis dosyalarında kullanılmak üzere tasarlanmamış uzantı tabanlı görselleştiricileri destekler. TreeTraverse_Skip - Bekleyen 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.
Sizeof
iş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.
Diğer Adları İçeri Aktar
İçeri aktarma diğer adları desteklenmez.
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
AddressOf
End
Error
Exit
Goto
On Error
Resume
Return
Select/Case
Stop
SyncLock
Throw
Try/Catch/Finally
With
veya gibi
End Sub
Module
ad alanı veya modül düzeyi anahtar sözcükleri.