Aracılığıyla paylaş


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 FixedPointtanı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 daha str[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 Modulead alanı veya modül düzeyi anahtar sözcükleri.