Mini-core-dump özelliğini (__try/__ haricinde ve MiniDumpWriteDump() ile benim Qt uygulamasının Windows derlemesine ekledim), böylece uygulamamın/uygulamanın hiç çökmesi durumunda bir .dmp dosyası yazılacak. bana bakmak ve daha sonra hata ayıklamak için disk.Windows uygulamamı kasıtlı olarak kilitlemenin en iyi yolu nedir?
Oldukça iyi çalışıyor, ancak sınama için programımın çökmesini sağlamak için bilinen güvenilir bir yönteme sahip olmak isterim. Örneğin, GUI'de "şimdi kilitle" düğmesi olabilir ve kullanıcı tıkladığında uygulamanın kasıtlı olarak kilitlenmesine neden olur.
bir yolu yapmak, tabii ki, şu şekildedir:
int * badPointer = NULL;
*badPointer = 666;
Ve bu benim için çalışır, ancak tanımsız davranış dayanır çünkü bu yaklaşıma sevmiyorum - özellikle de C++ standardı 'un bir çökmeye neden olması için yukarıdaki kodu gerektirmiyor, bu nedenle (kod-avukat perspektifinden), yukarıdaki kod çalıştırıldığında derleyicinin gelecekteki bazı sürümlerinin çökmemesi mümkündür. daha "resmi" bir yaklaşım olarak
, bu çalıştı: Programı sonlandırmak yok, ama hayır, bu yüzden MiniCrashDump işleyicisi tetikler, Windows Yapılandırılmış İstisna neden olmaz
abort();
... .dmp dosyası yazılır.
Benim sorum şu, programımı çökertmek için bir "Resmi Doğru Yol" var mı? Windows API'nın arayabileceğim bir RaiseException() işlevine sahip olduğunu görüyorum, ancak uygun argümanların ne olduğundan emin değilim. Bu, gitmenin yolu mu yoksa kullanmanın daha iyi olabileceğine dair daha spesifik bir çağrı var mı?
Ekranda çekiç. –
Özellikle uygulamaya özel anahtar kelimeler ve davranışlar kullanıyorsunuz ve bir C++ özelliğinin bir gün bunun hakkında ne söyleyebileceğinden endişe ediyorsunuz? Elbette, RaiseException() resmi yoludur. –
@HansPassant "Ben kötü niyetli NULL olduğunu bildiğimden beri ve" NULL işaretçisi tanımsız bir davranış olduğunu söyleyerek, "gibi gcc tarzı akıl-hileler yapmaya başlayabilir MSVC optimizer olarak beni çok endişe C++ spec değil, ben yapabilirsiniz Bunu yazıp "... ve sonra aniden çökme düğmem artık çökmez. :) –