Aracılığıyla paylaş


Yerel C++ ifadelerde

Hata ayıklayıcı, çoğu Microsoft ve ANSI c/C++ ifadeleri kabul eder.Ayrıca, hata ayıklayıcı sağlar iç işlevler ve içeriği işleçleri değerlendirilirken ifadeleri daha güvenli ve daha kullanışlı hale getirmek için.Bu konu ayrıca aşağıdakilere dikkat etmeniz gereken c++ ifadeleri kısıtlamaları açıklamaktadır:

Yönetilen kod deyimleri veya içerik işleci veya çoğu biçimi tanımlayıcıları kod veya komut dosyası ile kullanamazsınız.Bunlar yerel c++ ifade değerlendirici için özeldir.

Bu bölümde

Durumunu korumak için hata ayıklayıcı intrinisic işlevlerini kullanma

Bir simge belirtmek için içerik işleçleri kullanma

Yerel c++ ifadeleri kısıtlamalar

  • Erişim denetimi

  • Belirsiz başvuruları

  • Anonim ad alanları

  • Kurucular ve Yıkıcılar dönüşümleri

  • Kalıtım

  • Inlined ve derleyici iç işlevler

  • Sayısal sabitler

  • İşleç işlevler

  • tekrar yükleme

  • Önceliği

  • Simge biçimleri

  • Tür atama

Durumunu korumak için hata ayıklayıcı intrinisic işlevlerini kullanma

Hata ayıklayıcı iç işlevler, uygulama durumunu değiştirmeden ifadelerinde bazı c/C++ işlevleri çağırmak için bir yol sağlar.

Hata ayıklayıcı iç işlevler:

  • Güvenli olduğu garanti: hata ayıklayıcı iç işlev yürütülürken değil bozuk ayıklanacak işlem.

  • Nerede yan etkileri ve işlev değerlendirmesi yapılamaz senaryolarda bile tüm ifadelerde izin verilir.

  • Burada normal işlev çağrıları bir mini döküm hata ayıklama gibi mümkün olmayan senaryoları çalışır.

Hata ayıklayıcı iç işlevler de değerlendirilirken ifadeleri daha kullanışlı hale getirebilirsiniz.Örneğin, strncmp(str, “asd”) 'den bir kesme noktası koşulunda yazmak çok kolay str[0] == ‘a’ && str[1] == ‘s’ && str[2] == ‘d’.)

Alan

İç işlevler

Dize uzunluğu

strlen, wcslen, strnlen, wcsnlen

Dize karşılaştırması

strcmp, wcscmp, stricmp, _stricmp, _strcmpi, wcsicmp, _wcscmpi, _wcsnicmp, strncmp, wcsncmp, strnicmp, wcsnicmp

Arama dizesi

strchr, wcschr, strstr, wcsstr

Win32

GetLastError() işlevinin yeterli TlsGetValue()

Windows 8

WindowsGetStringLen(), WindowsGetStringRawBuffer()

Bu işlevler Windows 8 üzerinde çalışması ayıklanacak işlem gerektirir.Hata ayıklama dökümü dosyaları Windows 8 aygıttan üretilen de Visual Studio bilgisayar olmasını gerektirir çalıştıran Windows 8.Windows 8 aygıt uzaktan hata, ancak, Visual Studio bilgisayarı Windows 7 çalıştırıyor olabilir.

Çeşitli konular

__log2

Günlük temel 2 alt en yakın tamsayıya yuvarlanmış, belirtilen bir tamsayı döndürür.

Bir simge belirtmek için içerik işleçleri kullanma

Bağlam işleç yerel hata ayıklayıcı tarafından sağlanan ek işleçtir.Yerel kod hata ayıklama sırasında bir kesme noktası konumu, değişken adı veya ifade alabilmek için içerik işleci kullanabilirsiniz.İçerik işleci, aksi halde yerel adıyla gizli bir dış kapsam adı belirtme gibi amaçlar için yararlıdır.

Sözdizimi

{,,module} ifade

  • Modül bir modülün adı.Aynı ada sahip modüller arasında belirsizliği ortadan kaldırmak için tam bir yol kullanabilirsiniz.

  • ifade gibi bir işlev adı, değişken adını veya işaretçi adresi geçerli bir hedef çözümler geçerli herhangi bir c++ ifade modülü.

İki virgül ve modül parantezler içermelidir (çalıştırılabilir veya dll) adını veya tam yolu.

Örneğin, bir kesme noktasında ayarlamak için SomeFunction EXAMPLE.dll işlevi:

{,,EXAMPLE.dll}SomeFunction

Modülü yolunu içeren bir virgül, katıştırılmış bir boşluk veya bir küme ayracı, dize içerik ayrıştırıcı düzgün tanımasını yolunu tırnak işareti kullanmanız gerekir.Tek tırnak işareti, çift tırnak işareti kullanmanız gerekir böylece Windows dosya adının bir parçası olarak kabul edilir.Örnek:

{,"a long, long, library name.dll", } g_Var

Bir ifadede bir sembolü ifade değerlendirici karşılaştığında, simge aşağıdaki sırayla arar:

  1. Dışa geçerli blok, ayraç içine ve dışa doğru kapsayan blok ile Devam ifadeleri dizi başlayarak doğru sözlü kapsamı.Geçerli konum, yönerge işaretçi adresi içeren kodun geçerli taşıdır.

  2. İşlev kapsamı.Geçerli işlev.

  3. Geçerli konuma bir c++ üye işlev içinde ise sınıf kapsamı.Sınıf kapsamı tüm temel sınıflar içerir.İfade değerlendirici normal doğanın kurallarını kullanır.

  4. Geçerli modül içindeki genel simgeler.

  5. Geçerli programda ortak simgeleri.

İçerik işleci ile aramanın başlangıç modülü belirtin ve geçerli konuma atlama.

Yerel c++ ifadeleri kısıtlamalar

Hata ayıklayıcısı penceresinin içinde bir c/C++ ifade girdiğinizde, bu genel sınırlamalar geçerlidir:

y2t7ahxk.collapse_all(tr-tr,VS.110).gifErişim denetimi

Hata ayıklayıcı, erişim denetimi ne olursa olsun tüm sınıf üyeleri erişebilir.Temel sınıflar ve katıştırılmış member nesneleri dahil olmak üzere herhangi bir sınıf nesnesi üye inceleyebilirsiniz.

y2t7ahxk.collapse_all(tr-tr,VS.110).gifBelirsiz başvuruları

Hata ayıklayıcı ifade bir belirsiz üye adına başvuruyorsa, onu alabilmek için sınıf adı kullanmanız gerekir.Örneğin, CObject örneğidir CClass, miras adlı üye işlevleri expense her ikisinde AClass ve BClass, CObject.expense belirsiz.Belirsizlik şu şekilde çözebilirsiniz:

CObject.BClass::expense

Belirsizlikleri gidermek için ifade değerlendirici üye adlarını ilgili normal doğanın kurallarını uygular.

y2t7ahxk.collapse_all(tr-tr,VS.110).gifAnonim ad alanları

Yerel c++ ifade değerlendirici anonim ad alanlarını desteklemez.Örneğin, aşağıdaki kod olduğunu varsayalım:

#include "stdafx.h"

namespace mars 
{ 
    namespace
    {
        int test = 0; 
    } 

} 


int main() 
{ 
    // Adding a watch on test does not work. 
    mars::test++; 
    return 0; 
} 

Sembol izlemek için tek yol test Bu örnekte düzenlenmiş adı kullanmaktır:

(int*)?test@?A0xccd06570@mars@@3HA

y2t7ahxk.collapse_all(tr-tr,VS.110).gifKurucular ve Yıkıcılar dönüşümleri

Oluşturucu veya yıkıcı bir nesne için açıkça veya örtük olarak, geçici bir nesne yapım için çağıran bir ifade kullanarak çağıramazsınız.Örneğin, aşağıdaki deyim açıkça bir yapıcıyı çağırır ve bir hata iletisi verir:

Date( 2, 3, 1985 )

Bir sınıf dönüştürme hedefi ise, dönüştürme işlevini çağıramazsınız.Bu tür bir dönüşümü nesne oluşumunu kapsar.Örneğin, myFraction örneğidir CFraction, dönüştürme işlevi işleç tanımlar FixedPoint, aşağıdaki ifade, hatayla sonuçlanır:

(FixedPoint)myFraction

Ancak, yerleşik bir türe dönüştürme hedefi ise, dönüştürme işlevini çağırabilirsiniz.CFraction Dönüştürme işlevi tanımlar operator float, aşağıdaki ifade hata ayıklayıcıda yasal:

(float)myFraction

Bir nesneyi döndürebilir veya yerel nesneleri bildirebileceğiniz işlevler çağırabilirsiniz.

Çağıramazsınız new veya delete işleçleri.Aşağıdaki ifade hata ayıklayıcıda çalışmaz:

new Date(2,3,1985)

y2t7ahxk.collapse_all(tr-tr,VS.110).gifKalıtım

Sanal temel sınıf olan bir sınıf nesnesi görüntülemek için hata ayıklayıcı'yı kullandığınızda, bu üyelere yalnızca bir örneği depolansa da sanal temel sınıf üyelerinin her devralma yolu için görüntülenir.

Sanal işlev çağrıları düzgün ifade değerlendiricisi tarafından işlenir.Örneğin, sınıf varsayalım CEmployee sanal bir işlevi tanımlar computePay, devralan bir sınıf içinde yeniden CEmployee.Arayabileceğiniz computePay bir işaretçi ile CEmployee ve yürütülen uygun işlevi vardır:

empPtr->computePay()

Bir temel sınıf nesnesine bir işaretçi olarak türetilmiş bir sınıf nesnesine bir işaretçi çevirebilirsiniz.Sanal devralma olduğunda, temel sınıf nesnesine bir işaretçi bir türetilmiş bir sınıf nesnesine bir işaretçi içine dışında çevirebilirsiniz.

y2t7ahxk.collapse_all(tr-tr,VS.110).gifInlined ve derleyici iç işlevler

Hata ayıklayıcı ifade bir derleyici iç işlevler çağrılamıyor veya inlined işlevi normal bir işlev olarak en az bir kez görünür sürece işlev.

y2t7ahxk.collapse_all(tr-tr,VS.110).gifSayısal sabitler

Hata ayıklayıcı deyimleri tamsayı sabitler sekizlik, onaltılık veya ondalık biçimde kullanabilirsiniz.Varsayılan olarak, hata ayıklayıcı ondalık sabitleri bekler.Bu ayar değiştirilebilir Genel sayfası hata ayıklama sekme.

Başka bir Base sayýlarý ifade etmek için önek veya sonek simgeleri kullanabilirsiniz.Aşağıdaki tabloda, kullanabileceğiniz formları gösterir.

Sözdizimi

Örnek (ondalık 100)

Base

basamak

100 veya 64

Ondalık veya onaltılık geçerli ayarına bağlı olarak.

0basamak

0144

Octal (8 tabanı)

0nbasamak

0n100

Ondalık (10 tabanı)

0xbasamak

0x64

Onaltılı (16 tabanında)

basamakh

64 h

Onaltılı (16 tabanında)

y2t7ahxk.collapse_all(tr-tr,VS.110).gifİşleç işlevler

Hata ayıklayıcı ifade örtük veya açık olarak bir sınıf için işleç işlevler çağırabilirsiniz.Örneğin, varsayalım myFraction ve yourFraction tanımlayan bir sınıf örneği olan operator+.Bu ifadeyi kullanarak bu iki nesnenin toplamını görüntüler:

myFraction + yourFraction

Bir işleç işlevi bir arkadaş olarak tanımlanırsa, dolaylı olarak bir üye işlev için olduğu gibi aynı sözdizimini kullanarak çağırabilirsiniz veya onu çağırın şu şekilde açıkça:

operator+( myFraction, yourFraction )

Sıradan işlevler gibi işleç işlevler nesne oluşturmayı kapsayan bir dönüştürülmesi gereken bağımsız değişkenleri ile çağrılamaz.

Hata ayıklayıcı const ve sabit olmayan sürümleri ile fazla yüklenmiş işleçleri desteklemez.Fazla yüklenmiş işleçleri const ve sabit olmayan sürümleri ile standart şablon Kitaplığı'nda sık sık kullanılır.

y2t7ahxk.collapse_all(tr-tr,VS.110).giftekrar yükleme

Hata ayıklayıcı ifade tam bir eşleşme varsa veya bir eşleşme nesne oluşturmayı kapsayan bir dönüştürme gerektirmiyorsa aşırı yüklenmiş işlevleri çağırabilir.Örneğin, calc işlev alır bir CFraction nesne bir parametre olarak ve CFraction sınıfı, aşağıdaki ifade bir hata ile sonuçlanıyor bir tamsayı kabul eden bir tek bağımsız değişkenli yapıcı tanımlar:

calc( 23 )

Tamsayı olarak dönüştürmek için yasal bir dönüştürme var olsa da CFraction nesnesinin calc bekler, bir dönüştürme desteklenmez ve nesne oluşturma ile ilgilidir.

y2t7ahxk.collapse_all(tr-tr,VS.110).gifÖnceliği

Hata ayıklayıcısını ifadelerinde c++ kapsam işleci (::), kaynak koda göre daha düşük önceliğe sahiptir.Bu işleç c++ kaynak kodunda, en yüksek önceliğe sahiptir.Hata Ayıklayıcı'kendi öncelik tabanı ve sonek operatörleri arasında düştüğünde (->, ++, --) ve tekli operatörler (!, &, *ve diğerleri).

y2t7ahxk.collapse_all(tr-tr,VS.110).gifSimge biçimleri

Tam hata ayıklama bilgisi ile derlenmiş Modül içindeki simgeler olması şartıyla, kaynak kodunda kullanılan aynı form içindeki simgeler içeren bir hata ayıklayıcı ifade girin (/Zi veya /ZI).Ortak sembolleri içeren bir deyim girerseniz, hangi simgeleri kitaplıklarındaki veya ile derlenmiş modülleri bulunur /Zd, sembolün düzenlenmiş adı kullanmanız gerekir, form içinde kullanılan nesne kodu.Daha fazla bilgi için bkz: /Z7, /Zd, /Zi, /ZI (hata ayıklama bilgi biçimi).

Düzenlenmiş ve ve formlarını bağlantı/Map seçeneğini kullanarak tüm adlar listesini elde edebilirsiniz.Daha fazla bilgi için bkz: /Map (Mapfile üretmek).

Ad düzenleme tür-güvenli bağlantı zorlamak için kullanılan mekanizmadır.Bu, yalnızca adlarını ve başvurular tam olarak eşleşen yazım denetimi, büyük/küçük harf, çağırma ve türü ile birbirine bağlanmış anlamına gelir.

c çağırma kuralı, örtük veya açık olarak kullanma ile bildirilen ad _cdecl anahtar sözcüğü, bir alt çizgi ile başlayan ( _ ).Örneğin, işlev main olarak gösterilen _main.Adları olarak bildirilen _fastcall ile başlayan @ simgesi.

c++ için çağırma kuralı yanı sıra sembol türünü düzenlenmiş adı kodlar.Bu form adı uzun ve zor olabilir.Adı en az bir soru işareti ile başlar (?).İçin c++ işlevlerini, Süs işlev kapsamı, işlev parametre türleri ve işlevin dönüş türü içerir.

y2t7ahxk.collapse_all(tr-tr,VS.110).gifTür atama

Bir türe, türü için hata ayıklayıcı bilinmelidir.Programınızda başka bir nesne türü olması gerekir.Kullanılarak oluşturulan türleri typedef deyimleri desteklenmez.