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 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şulunda str[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.

  • 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.

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

  • AddressOf

  • End

  • Error

  • Exit

  • Goto

  • On Error

  • Resume

  • Return

  • Select/Case

  • Stop

  • SyncLock

  • Throw

  • Try/Catch/Finally

  • With

  • Ad alanı veya modül düzeyi anahtar sözcükleri, örneğin End Sub veya Module.