2016-08-08 37 views

cevap

11

Q_ASSERT sözde standart assert fonksiyonunu artırır özel bir assert makrosudur.

hata mesajı standart assert makrosu göre bazı platformlarda biraz daha iyi davranabilir qFatal() tarafından ele alınır. Örneğin, Windows'da, Visual Studio hata ayıklayıcısını, yalnızca abort() numaralı telefonu aramak yerine onaylama işleminin başarısız olduğu noktada tetikler.

Ayrıca Qt hata mesajı fonksiyonlarının çıktı yönlendirebilirsiniz böyle (qInstallMessageHandler() ile) özel mesaj işleyicisi için qFatal olarak. Örneğin, hata mesajını bir dosyaya yönlendirmek faydalı olabilir.

Ayrıca Q_ASSERT engelli olduğuna dikkat makro QT_NO_DEBUG (assertNDEBUG olarak devre iken): Bu senin Qt ile ilgili kod ve geri kalanı arasında iddia ayırmak için kullanılabilir.

+0

Bir yan notda, özel assert makrolarının nasıl çalıştığı ve neden yararlı olduklarıyla ilgili daha ayrıntılı bir açıklama istiyorsanız, ellerinizi alın ** _Game Programming Gems_ içinde Steve Rabin tarafından daha fazla assert ** – Louen

3

:

QT_NO_DEBUG derleme sırasında tanımlanmış olsaydı daha hiçbir şey yapmaz.

Yani, bunu düşünmek: Q_ASSERTNDEBUG yokluğunda bağlı değildir, assert olduğu gibi. #ifndef NDEBUGassert() için herhangi bir şey yapmak için gereklidir ve aynı zamanda genellikle kullanıcı (ve muhtemelen kütüphane ..?) Kodundaki diğer genel hata ayıklama sadece şeyleri sınırlamak için kullanılır. ayrı bir makro kullanma

programı NDEBUG eğer kabartmak edeceğiz ayıklama okunur şeylerle kod kalanını tanımsız NDEBUG bırakarak ve böylece yük olmadan, sadece Qt ile ilgili şeyleri ayıklamak istediğiniz isteyenler için bir avantajdır tanımlı değil, özellikle assert() s.

Yani, -DNDEBUG ama ile derlemek olabilir değil-DQT_NO_DEBUG sen bırakma modu semantik ile 'normal' şeyler derlemek ama hala Qt şeyler hata ayıklama uygulamak istiyorsa.

Karmaşık bir GUI uygulaması geliştirirken bu kesinlikle çok yararlıdır. Ben Qt kullanmıyorum (henüz?) Ama GTK +/gtkmm [... eminim var, ama henüz bakmadım ;-)] seçilmiş araç takımlarımda böyle şeyleri kullanmanın yararını görüyorum ;-)

Eğer dik bir teklifin tartışma ile iç içe geçmiş, burada bu konuda son animasyonlu tartışma hatırlama: ISO C++ Standard - Future Proposals › Exception stack trace information.

+0

Evet, farklı hata ayıklama tanımlarını fark ettim, daha fazla bir şey olup olmadığını merak ediyordum. Fakat bu olasılığa sahip olmak mantıklı. – Zitrax