Aracılığıyla paylaş


mfc hata ayıklama teknikleri

mfc program hata ayıklaması yapıyorsanız, bu hata ayıklama teknikleri yararlı olabilir.

Bu konuda

AfxDebugBreak

İzleme makro

MFC'de algılama bellek sızıntısına neden oluyor

  • Bellek ayırmalarını izleme

  • Bellek Tanılama'yı etkinleştirme

  • Bellek anlık görüntü alınması

  • Bellek istatistiklerini görüntüleme

  • Alma nesnesi döker

    • Yorumlama bellek dökümleri

    • Özelleştirme nesne döker

    Bir mfc hata ayıklama yapı boyutunu küçültme

    • Seçili modül hata ayıklama bilgileriyle bir mfc uygulaması oluşturma

AfxDebugBreak

mfc sağlayan özel bir AfxDebugBreak işlev için kaynak kodu içinde kesme zor kodlama:

AfxDebugBreak( );

Intel platformlarında, AfxDebugBreak hangi kesmelere kaynak kodu çekirdek kodu aşağıdaki kod üretir:

_asm int 3

Diğer platformlarda AfxDebugBreak yalnızca çağırır DebugBreak.

Kaldırdığınızdan emin olun AfxDebugBreak bir yayın oluşturduğunuzda, ifadeleri oluşturmak veya kullanmak #ifdef _DEBUG onları içine.

Bu konuda

İzleme makro

Hata ayıklayıcıda programı alınan iletileri görüntülemek için Output penceresi, kullanabileceğiniz atltrace makro veya mfc İzleme makro.Gibi onayları, izleme makrolar yalnızca hata ayıklama sürümünde program etkin ve yayın sürümünde derlendiğinde kaybolur.

Aşağıdaki yollarla kullanabileceğiniz bazı örnekler İzleme makro.Gibi printf, İzleme bir dizi bağımsız değişkenleri makro işleyebilirsiniz.

int x = 1;
int y = 16;
float z = 32.0;
TRACE( "This is a TRACE statement\n" );

TRACE( "The value of x is %d\n", x );

TRACE( "x = %d and y = %d\n", x, y );

TRACE( "x = %d and y = %x and z = %f\n", x, y, z );

İzleme makro char * hem wchar_t * parametreleri gerektiği gibi işler.Aşağıdaki örnekler, farklı türde dize parametreleri ile birlikte izleme makro kullanımını gösterir.

TRACE( "This is a test of the TRACE macro that uses an ANSI string: %s %d\n", "The number is:", 2);

TRACE( L"This is a test of the TRACE macro that uses a UNICODE string: %s %d\n", L"The number is:", 2);

TRACE( _T("This is a test of the TRACE macro that uses a TCHAR string: %s %d\n"), _T("The number is:"), 2);

Daha fazla bilgi için İzleme makro, bkz: Tanı Hizmetleri.

Bu konuda

MFC'de algılama bellek sızıntısına neden oluyor

mfc Bellek tahsis ancak hiçbir zaman ayırmanın algılamak için sınıflar ve işlevler sağlar.

7sx52ww7.collapse_all(tr-tr,VS.110).gifBellek ayırmalarını izleme

Makroyu kullanabilirsiniz, MFC'de debug_new yerine Yeni bellek bulmanıza yardım etmek için işleç sızdırıyor.Programınızda, hata ayıklama sürümünde DEBUG_NEW ayırdığı her nesne için dosya adı ve satır numarası izler.Programınızın sürümünü derlerken DEBUG_NEW çözümler için basit bir Yeni dosya adı ve satır numarası bilgisi olmadan işlem.Bu nedenle, programınızın yayın sürümünde yok hız cezası ödeme.

Tüm programı kullanacak şekilde yeniden yazmak istemiyorsanız, DEBUG_NEW yerine Yeni, bu makro kaynak dosyalarınızı tanımlayabilirsiniz:

#define new DEBUG_NEW

Yaptığınızda bir nesne döküm, her nesne ile ayrılan DEBUG_NEW burada da ayrıldı, dosya ve satır numarası gösterilir bellek sızıntıları kaynaklarını saptamak olanak sağlar.

mfc çerçevesi hata ayıklama sürümünü kullanan DEBUG_NEW otomatik olarak, ama kodunuzu oluşturmaz.Yararları istiyorsanız, DEBUG_NEW, kullanmanız gereken DEBUG_NEW açıkça veya # Yeni tanımlamak yukarıda gösterildiği gibi.

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifBellek Tanılama'yı etkinleştirme

Bellek Tanılama özellikleri kullanabilmeniz için tanı izleme etkinleştirmeniz gerekir.

Bellek Tanılama'yı devre dışı bırakmak veya etkinleştirmek için

  • Genel işlevin çağrısı AfxEnableMemoryTracking tanı bellek ayırıcısı devre dışı bırakılır.Hata ayıklama Kitaplığı'nda varsayılan olarak, Bellek Tanılama, çünkü genellikle bu işlevi geçici olarak onları devre dışı bırakmak için program yürütme hızını artırır ve tanı çıktı azaltır kullanacaktır.

Bellek Tanılama özellikleriyle afxMemDF seçmek için

  • Bellek Tanılama özellikleri üzerinde daha kesin bir denetim istiyorsanız, seçerek bireysel bellek tanılama özellikleri açma ve kapatma mfc genel değişkenin değerini ayarlayarak kapatabilirsiniz afxMemDF.Bu değişken numaralanmış tür belirtildiği gibi aşağıdaki değerlere sahip olabilir afxMemDF.

    Value

    Tanımlama

    allocMemDF

    Tanı bellek ayırıcısı (varsayılan) üzerinde bırakın.

    delayFreeMemDF

    Bellek boşaltma çağrılırken gecikme delete veya free kadar programından çıkar.Bu bellek miktarı üst sınırını tahsis etmek program neden olur.

    checkAlwaysMemDF

    Call AfxCheckMemory bellek tahsis veya serbest her zaman.

    Bu değerleri birlikte bir mantıksal or işlemi gerçekleştirerek aşağıda gösterildiği gibi kullanılabilir:

    afxMemDF = allocMemDF | delayFreeMemDF | checkAlwaysMemDF;
    

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifBellek anlık görüntü alınması

  1. Oluşturma bir CMemoryState nesne ve çağrı CMemoryState::Checkpoint üye işlevini.Bu ilk bellek anlık görüntü oluşturur.

  2. Programın bellek ayırma ve ayırmayı kaldırma işlemi gerçekleştirdikten sonra başka birini oluşturmak CMemoryState nesne ve çağrı Checkpoint bu nesne için.Bu ikinci bir anlık bellek kullanım alır.

  3. Üçüncü oluşturmak CMemoryState nesne ve çağrı kendi CMemoryState::Difference üye işlevi, bağımsız değişken olarak önceki iki Johannes CMemoryState nesneler.İki bellek durumları arasında bir fark varsa Difference işlevi sıfır olmayan bir değer döndürür.Bu, bazı bellek blokları yok ayırmanın olduğunu gösterir.

    Bu örnek kodu nasıl göründüğünü gösterir:

    // Declare the variables needed
    #ifdef _DEBUG
        CMemoryState oldMemState, newMemState, diffMemState;
        oldMemState.Checkpoint();
    #endif
    
        // Do your memory allocations and deallocations.
        CString s("This is a frame variable");
        // The next object is a heap object.
       CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
    
    #ifdef _DEBUG
        newMemState.Checkpoint();
        if( diffMemState.Difference( oldMemState, newMemState ) )
        {
            TRACE( "Memory leaked!\n" );
        }
    #endif
    

    Belleğinizi kontrol deyimleri tarafından bracketed dikkat edin #ifdef_DEBUG/ #endif programınız yalnızca hata ayıklama sürümleri içinde derlenmiş böylece engeller.

    Bir bellek sızıntısı var yaratacaðýnýzý öðrendiðinize göre başka bir üye işlevini kullanabilirsiniz CMemoryState::DumpStatistics, çok Bellek istatistikleri görüntüleme yardımcı olacak bulmak.

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifBellek istatistiklerini görüntüleme

CMemoryState::Difference İşlevi iki bellek durumu nesneler arar ve Öbek başlangıcını ve bitişini durumlarındaki'dan ayırmanın değil tüm nesnelerin algılar.Sonra alınan anlık bellek ve onları karşılaştırıldığında kullanarak CMemoryState::Difference, arayabileceğiniz CMemoryState::DumpStatistics değil ayırmanın nesneler hakkında bilgi almak için.

Aşağıdaki örneği inceleyin:

if( diffMemState.Difference( oldMemState, newMemState ) )
{
   TRACE( "Memory leaked!\n" );
   diffMemState.DumpStatistics();
}

Örnek bir örnek dökümü şöyle görünür:

0 bytes in 0 Free Blocks
22 bytes in 1 Object Blocks
45 bytes in 4 Non-Object Blocks
Largest number used: 67 bytes
Total allocations: 67 bytes

Ücretsiz taşlarıdır varsa, ayırmayı kaldırma Gecikmeli bloklar afxMemDF ayarlamak delayFreeMemDF.

Sıradan nesne blokları, ikinci satırda gösterilen yığında ayrılmış olarak kalır.

Diziler dahil olmayan nesne blokları ve yapıları ile ayrılan new.Bu durumda, dört nesne olmayan bloklar yığında ayrılmış ancak ayırmanın değil.

Largest number usedprogram tarafından herhangi bir zamanda kullandığı en büyük bellek verir.

Total allocationsprogram tarafından kullanılan belleğin toplam miktarını verir.

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifAlma nesnesi döker

Bir mfc programında kullanabileceğiniz CMemoryState::DumpAllObjectsSince değil ayırmanın tüm nesneleri yığında açıklamasını dökümünü almak için.DumpAllObjectsSinceen son yedeklemesinden sonra ayrılan tüm nesneleri döker CMemoryState::Checkpoint.Hiç Checkpoint çağrısı gerçekleşmeden, DumpAllObjectsSince tüm nesneleri ve bellekte bulunan nonobjects döker.

[!NOT]

mfc nesnesi dökülüyor kullanmadan önce yapmanız gerekenler tanı izlemesini etkinleştirmek.

[!NOT]

Programınızın çıktığında mfc sızdırılan tüm nesneler otomatik olarak döker, dökümünü almak için kod oluşturmanız gerekmez böylece o noktada nesneleri.

Aşağıdaki kod iki bellek durumu karşılaştırarak bir bellek sızıntısı için sınar ve tüm nesneleri bir sızıntısı algılandığında, döker.

if( diffMemState.Difference( oldMemState, newMemState ) )
{
   TRACE( "Memory leaked!\n" );
   diffMemState.DumpAllObjectsSince();
}

Döküm içeriği şöyle:

Dumping objects ->

{5} strcore.cpp(80) : non-object block at $00A7521A, 9 bytes long
{4} strcore.cpp(80) : non-object block at $00A751F8, 5 bytes long
{3} strcore.cpp(80) : non-object block at $00A751D6, 6 bytes long
{2} a CPerson at $51A4

Last Name: Smith
First Name: Alan
Phone #: 581-0215

{1} strcore.cpp(80) : non-object block at $00A7516E, 25 bytes long

Çoğu satırların numaralarını başında ayraç içinde hangi nesnelerin ayrılan sırasını belirleyin.En son ayrılan nesneniz en yüksek numara vardır ve döküm üst kısmında görünür.

En fazla miktarda bilginin dışında bir nesne dökümü almak için geçersiz kılıp Dump , herhangi bir üye işlevini CObject-türetilmiş nesnesinin nesne döküm özelleştirmek için.

Genel değişkeni ayarlayarak belirli bellek ayırma bir kesme noktası ayarlayabilirsiniz _afxBreakAlloc küme ayraçları numarasına.Programını yeniden çalıştırın, bu tahsisat gerçekleştiğinde hata ayıklayıcı yürütme çalışmamasına neden olur.Sonra o noktaya nasıl programınız var görmek için çağrı yığını bakabilirsiniz.

c çalışma zamanı kitaplığı benzer bir işlevi olan _CrtSetBreakAlloc, c çalışma zamanı ayırma için kullanabilirsiniz.

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifYorumlama bellek dökümleri

Bu nesne döküm daha ayrıntılı bakmak:

{5} strcore.cpp(80) : non-object block at $00A7521A, 9 bytes long
{4} strcore.cpp(80) : non-object block at $00A751F8, 5 bytes long
{3} strcore.cpp(80) : non-object block at $00A751D6, 6 bytes long
{2} a CPerson at $51A4

Last Name: Smith
First Name: Alan
Phone #: 581-0215

{1} strcore.cpp(80) : non-object block at $00A7516E, 25 bytes long

Bu dökümü oluşturan program yalnızca iki açık Tahsisatları vardı — bir yığın ve öbek üzerinde:

// Do your memory allocations and deallocations.
CString s("This is a frame variable");
// The next object is a heap object.
CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );

CPerson Yapıcı işaretçiler üç bağımsız değişken alır char, başlatmak için kullanılır, CString üye değişkenleri.Bellek dökümü gördüğünüz CPerson nesnesi ile birlikte üç nonobject blokları (3, 4 ve 5).Bu karakterler için basılı CString üye değişkenleri ve ne zaman silinmeyecek CPerson nesne yıkıcısının çağrılır.

Blok numarası 2 olan CPerson nesnesinin kendisi.$51A4Adres Bloğu temsil eder ve tarafından çıkış nesnesinin içeriğini arkasından CPerson::Dump çağrıldığında DumpAllObjectsSince.

Blok numarası 1 ile ilişkili tahmin CString nedeniyle, sıra numarası ve çerçeve içinde karakter sayısını eşleşen boyutu, değişken çerçeve CString değişkeni.Çerçeve kapsam dışına çıktığında çerçevesinde ayrılan değişkenleri otomatik olarak yerleşimleri iptal edilir.

Çerçeve değişkenleri

Genel olarak, yerleşimleri çerçeve değişkenleri kapsam dışında olduğunuzda, bunlar otomatik olarak iptal edilir çünkü çerçeve değişkenleri ile ilişkili yığın nesneleriyle ilgili endişe değil.Bilgisayarınızın bellek tanılama dökümleri dağınıklığı önlemek için aramalarınız getirin Checkpoint çerçeve değişkenlerini kapsamı dışında olmasını sağlayın.Örneğin, önceki ayırma kod kapsamı parantezler, aşağıda gösterildiği gibi yerleştirin:

oldMemState.Checkpoint();
{
    // Do your memory allocations and deallocations ...
    CString s("This is a frame variable");
    // The next object is a heap object.
    CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
}
newMemState.Checkpoint();

Yerinde kapsam ayraç ile bu örnek için bellek dökümü aşağıdaki gibidir:

Dumping objects ->

{5} strcore.cpp(80) : non-object block at $00A7521A, 9 bytes long
{4} strcore.cpp(80) : non-object block at $00A751F8, 5 bytes long
{3} strcore.cpp(80) : non-object block at $00A751D6, 6 bytes long
{2} a CPerson at $51A4

Last Name: Smith
First Name: Alan
Phone #: 581-0215

Nonobject ayırma

Bazı Tahsisatları nesneleri olduğuna dikkat edin (gibi CPerson) ve nonobject ayırma bazılarıdır. "Nonobject ayırma"den türetilmiş nesneleri değil için ayırmaları olan CObject veya Tahsisatları gibi ilkel c türleri char, int, veya uzun.CObject -türetilmiş bir sınıf gibi iç arabelleklerini nesnelere hem nesneyi hem de nonobject ayırma Göster ek alan ayırır.

Bellek sızıntılarını engelleyerek

Yukarıdaki kod ile ilişkili bellek bloğu dikkat edin CString çerçeve değişkeni otomatik olarak ayırmanın ve bir bellek sızıntısı görünmüyor.Kapsama kuralları ile ilişkili otomatik kaldırma geçen çerçeve değişkenleri ile ilişkili çoğu bellek sızıntıları ele.

Yığında ayrılmış nesneleri için ancak, açıkça bir bellek sızıntısı önlemek için nesnesini silmeniz gerekir.Önceki örnekteki son bellek sızıntısı temizlemek için Sil CPerson nesnesi yığında ayrılmış gibi:

{
    // Do your memory allocations and deallocations.
    CString s("This is a frame variable");
    // The next object is a heap object.
    CPerson* p = new CPerson( "Smith", "Alan", "581-0215" );
    delete p;
}

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifÖzelleştirme nesne döker

Bir sınıftan türetmek ne zaman CObject, geçersiz kılmak Dump üye işlevini kullandığınızda ek bilgi sağlamak için DumpAllObjectsSince döküm nesnelere Output penceresi.

Dump İşlevi Yazar metinsel gösterimini nesnenin üyesi değişkenleri bir döküm içeriği (CDumpContext).Bir g/ç akışını döküm bağlam benzer.Ekleme işlecini kullanabilirsiniz (<<) veri göndermek için bir CDumpContext.

Geçersiz kılma ne zaman Dump işlevi, temel sınıf sürümü ilk çağrı Dump temel sınıf nesnesinin içeriğini dökümünü almak için.Sonra metinsel tanımı ve türetilmiş sınıfınızın her üye değişkeni değerini çıktı.

Bildirimi Dump işlevi aşağıdaki gibi görünür:

class CPerson : public CObject
{
public:
#ifdef _DEBUG
    virtual void Dump( CDumpContext& dc ) const;
#endif

    CString m_firstName;
    CString m_lastName;
    // And so on...
};

Programınızda, bildirimi hata ayıklaması yapıyorsanız nesne dökme yalnızca anlamlı çünkü Dump işlevi ile bracketed bir #ifdef _debug / #endif blok.

Aşağıdaki örnekte, Dump işlev çağrıları ilk Dump onun temel sınıfı için işlev.Sonra kısa bir açıklama her üyenin değeri ile birlikte üye değişkeni tanı akışa yazar.

#ifdef _DEBUG
void CPerson::Dump( CDumpContext& dc ) const
{
    // Call the base class function first.
    CObject::Dump( dc );

    // Now do the stuff for our specific class.
    dc << "last name: " << m_lastName << "\n"
        << "first name: " << m_firstName << "\n";
}
#endif

Sağlamanız gereken bir CDumpContext dökümü çıkış nereye belirtmek için bağımsız değişkeni.mfc hata ayıklama sürümünü sağladığı önceden tanımlanmış bir CDumpContext adlı nesne afxDump , hata çıktı gönderir.

CPerson* pMyPerson = new CPerson;
// Set some fields of the CPerson object.
//...
// Now dump the contents.
#ifdef _DEBUG
pMyPerson->Dump( afxDump );
#endif

Bu konuda

Bir mfc hata ayıklama yapı boyutunu küçültme

Çok disk alanı büyük bir mfc uygulaması için hata ayıklama bilgileri alabilir.Boyutunu azaltmak için aşağıdaki yordamlardan birini kullanabilirsiniz:

  1. Kullanarak mfc kitaplıklarını yeniden / Z7, /Zi, /ZI (hata ayıklama bilgileri biçimi) seçeneği, yerine /Z7.Bu seçenekler tüm kitaplığı fazlalığı azaltmak ve alan kaydetme, hata ayıklama bilgilerini içeren bir tek program veritabanı (pdb) dosyası oluşturun.

  2. Hata ayıklama bilgisi olmadan mfc kitaplıklarını yeniden (yok / Z7, /Zi, /ZI (hata ayıklama bilgileri biçimi) seçeneği).Bu durumda, hata ayıklama bilgilerinin yetersizliği çoğu hata ayıklayıcı tesis içinde mfc kitaplık kodu kullanmasını önler, ancak mfc kitaplıklarını zaten iyice ayıklanamaz çünkü bu bir sorun olmayabilir.

  3. Seçili modül hata ayıklama bilgileriyle kendi uygulama yalnızca aşağıda açıklandığı gibi oluşturun.

Bu konuda

7sx52ww7.collapse_all(tr-tr,VS.110).gifSeçili modül hata ayıklama bilgileriyle bir mfc uygulaması oluşturma

Seçili modüller ile mfc hata ayıklama kitaplıkları oluşturma atlama kullanmanıza ve bu modüllerde diğer hata ayıklama özelliklerini etkinleştirir.Bu yordam her iki hata ayıklama kullanın yapar ve böylece tam bir yayın yapısı gerekli olduğunda aşağıdaki adımları (ve gerekirse yapmayı bir "tümünü yeniden" de) tanımlanan değişiklikler necessitating Visual c++ makefile modları düğmesini serbest bırakın.

  1. Solution Explorer'da projeyi seçin.

  2. Dan Görünüm menüsünde, select Özellik sayfaları.

  3. İlk olarak, yeni bir proje yapılandırması oluşturur.

    1. İçinde <Project> Özellik sayfaları iletişim kutusunda, tıklatın Configuration Manager düğmesi.

    2. İçinde Configuration Manager iletiþim kutusunu, kılavuzdaki projeyi bulun.İçinde yapılandırma sütun select < yeni... >.

    3. İçinde Yeni bir proje yapılandırması iletişim kutusu, "Kısmi Debug" gibi yeni yapılandırmanız için bir ad yazın Proje yapılandırma adı kutusu.

    4. İçinde Kopyalama ayarları listesinde, seçim yayın.

    5. ' I tıklatın Tamam kapatmak için Yeni bir proje yapılandırmasıiletişim kutusu.

    6. Kapat Configuration Manager iletişim kutusu.

  4. Şimdi, tüm proje seçeneklerini ayarlamak.

    1. İçinde Özellik sayfaları iletişim kutusunda, altında Yapılandırma özellikleri klasöründeki Genel kategori.

    2. Proje ayarlarını kılavuzunda genişletin Proje Varsayılanları (gerekliyse).

    3. Altında Proje Varsayılanları, Bul MFC'yi kullan.Geçerli ayarı kılavuzun sağ sütununda görünür.Geçerli ayarları'nı tıklatın ve değiştirmek için MFC'yi statik kitaplıkta kullan.

    4. ' Nin sol bölmesinde Özellikleri sayfalarına iletişim kutusunda, açık c/c++ klasörüne ve seçme önişlemci.Özellikleri kılavuzda bulmak Önişlemci tanımlarına ve "ndebug" "_debug" ile değiştirin.

    5. ' Nin sol bölmesinde Özellikleri sayfalarına iletişim kutusunda, açık Bağlayıcı klasörüne ve seçme Giriş kategori.Özellikleri kılavuzda bulmak Ek bağımlılıklar.İçinde Ek bağımlılıklar ayarı yazın "nafxcwd.LIB"ve"LIBCMT"

    6. ' I tıklatın Tamam yeni yapı seçenekleri kaydetmek ve kapatmak için Özellik sayfaları iletişim kutusu.

  5. Dan Yapı menüsünde, select yeniden.Bu modüllerinizi tüm hata ayıklama bilgileri kaldırır ancak mfc Kitaplığı etkilemez.

  6. Şimdi seçili modüllerle uygulamanızda hata ayıklama bilgilerini eklemelisiniz.Kesme noktalarını ayarlayın ve hata ayıklama bilgisi ile derlenmiş modüller diğer hata ayıklayıcı yaptıklarınızı unutmayın.Eklemek istediğiniz her proje dosyasının hata ayıklama bilgileri için aşağıdaki adımları izleyin:

    1. Çözüm Gezgini'nde açın Kaynak dosyaları klasörünün altında proje.

    2. Hata ayıklama bilgisi için ayarlamak istediğiniz dosyayı seçin.

    3. Dan Görünüm menüsünde, select Özellik sayfaları.

    4. İçinde Özellik sayfaları iletişim kutusunda, altında Yapılandırma ayarlarını klasörü, açık c/c++ sonra klasörü seçin Genel kategori.

    5. Özellikleri kılavuzda bulmak Hata ayıklama bilgi biçimi.

    6. ' I tıklatın Hata ayıklama bilgi biçimi ayarları ve istediğiniz seçeneği belirleyin (genellikle /ZI) için hata ayıklama bilgileri.

    7. Önceden derlenmiş üstbilgiler veya Uygulama Sihirbazı tarafından oluşturulan bir uygulama kullanıyorsanız, önceden derlenmiş üstbilgileri devre dışı bırakmak veya diğer modüller derlemeden önce yeniden derlemeniz gerekir.Aksi halde, uyarı C4650 ve C2855 hata iletisi alırsınız.Değiştirerek, önceden derlenmiş üstbilgileri devre dışı bırakabilirsiniz Oluştur/Kullan önceden derlenmiş üstbilgileri ayarlarken <Project> Özellikleri iletişim kutusunu (Yapılandırma özellikleri klasörü, c/c++ , alt Önceden derlenmiş üstbilgileri kategori).

  7. Dan Yapı menüsünde, select Yapı güncel proje dosyalarını yeniden oluşturmak için.

Alternatif tekniği bu konuda açıklandığı gibi bir dış derleme görevleri her dosya için tek tek seçenek tanımlamak için kullanabilirsiniz.Bu durumda, mfc hata ayıklama kitaplıklarıyla bağlamak için tanımlamanız gerekir _debug her modül için bayrak.mfc sürüm kitaplıkları kullanmak istiyorsanız, ndebug tanımlamanız gerekir.Dış derleme yazma hakkında daha fazla bilgi için bkz: nmake başvuru.

Bu konuda

Ayrıca bkz.

Diğer Kaynaklar

Visual c++ hata ayıklama