2011-03-07 17 views
20

MinGW ile derlenen ve müşterilerden gelen çökme şikayetlerini aldığım bir C++ uygulamasına sahibim. Bu nedenle, (yeni bir sürümü yayınlamadan önce) çökebilecek kısımlarda yoğun bir şekilde oturum açmanın yanı sıra, bir hata ortaya çıktığında yığın izlemeyi ve diğer yararlı hata ayıklama bilgilerini bulmama yardımcı olacak bir çarpışma muhabiri arıyordum.MinGW uygulamaları için kilitlenme bildirimi

MinGW uygulamaları ile uyumlu böyle bir araç var mı? (Öyleyse derleyici ile çarpışma raporlama stratejisi arasında yakın bir ilişki var gibi görünüyor, bu nedenle soru).

Bana yardımcı olabilecek herhangi bir Windows aracı var mı? Uygulama, çoğunlukla Windows XP makinelerinde çalıştırılıyor.

Bir dosyaya bilgi yazabilmek benim amacım için yeterlidir. Ardından müşterime bilgileri postalamalarını isteyebilirim.

google-breakpad ve SetUnhandledExceptionFilter'u inceledim, ancak hala herhangi bir şekilde yararlı olup olmayacağını bilmiyorum. crashrpt gibi diğer kilitlenme raporları, Visual C++ için tasarlanmıştır, bu yüzden onları MinGW ile denemeyi çok fazla anlamıyor.

DÜZENLEME:

+0

Hangi IDE'yi kullanıyorsunuz? Not defteri, varsayılan olarak pencerelerde MinGW kullanan ve hata ayıklama yeteneklerine sahip olan QT framework ve QTCreator'ı ücretsiz olarak indirmeyi düşünür. – AJG85

+1

Teşekkürler, ancak müşterinin bilgisayarında yüklü bir programda hata ayıklamamı sağlayacak bir çarpışma muhabiri arıyorum. –

cevap

13
Aslında sorun bu kadar çalışmaya kilitlenme raporlarını almıyor. Bu DbgHelp kütüphane fonksiyonları ile oldukça önemsiz ve en belirgin olarak orada MiniDumpWriteDump. Bununla birlikte, eski sistemlerde DbgHelp kitaplığını yeniden dağıtmayı ve aramayı planladığınız işlevlerin sürüm gereksinimlerini gözlemlemeyi unutmayın; Windows'un daha yeni sürümleri, bu kitaplığın en az bir sürümü ile birlikte gelir.

olmayan MS derleyici kullanarak Senin sorunun (sorun Embarcadero, eskiden Borland ürünleri, örneğin, ya da Watcom ile var)

oluşturulan ayıklama sembolleri dbghelp kütüphanesine anlamsız olduğunu - ki Windows üzerinde hata ayıklama için standart bir tesistir. PDB formatı büyük ölçüde belgesizdir (bazı ipuçları için şu terimler için arama yapın: Sven Schreiber PDB) ve için kullanılan kitaplıklar oluşturmak için DbgHelp kitaplığı ile aynı anlamda "public" değiller - ikincisi yalnızca kullanılabilir oluşturulan hata ayıklama sembollerini okumak/ayrıştırmak. Onlar Visual Studio ürünlerinin bir parçasıdır ve genellikle mspdbXY.dll (XY ondalık basamaktır) gibi bir şey adlandırılır.

Hata raporları oluşturmak istiyorsanız, "derleyici sorunları" üzerine yoğunlaşmak yerine, hata ayıklayıcı sorunları üzerinde yoğunlaşmanızı şiddetle tavsiye ederim.Buyrun hangi genel tarifi şunlardır:

  1. belirli ayıklama biçimini anlayan bir hata ayıklayıcı (MinGW DWARF için GDB IIRC)
  2. Kullanım birden biçimlerini anlayan bir ayıklayıcı kullan (IDA akla gelen ve diğer avantajları da vardır;))
  3. WinBbg gibi sembollere bir uzantı yazın (DWARF) veya daha genel olarak .map dosyaları (Bu tür uzantıların birkaç yıl önce Borland için yazıldığının farkındayım) .map dosyaları)
  4. Montaj dilini öğrenin ve kullanılabilir araçları kullanın (Wi Muhtemelen sembollerin (daha önce bilmedikçe bir çok dik bir öğrenme eğrisi) ayrıca GCC derleme sırasında .S (montaj) dosyaları oluşturmak sağlayabilirsiniz 4'e bir uzantısı olarak

olmadan nDbg ya da daha genel olarak dbghelp kütüphanesi) Sembol desteği olmadan çalışırken kaynak kodu ve kilitlenme dökümünü çapraz referanslamak için.

Unixoid platformlarda GDB'yi, ancak Windows'ta WinDbg ve diğer hata ayıklayıcılarını tercih ettiğimden, Windows'da GDB'de gerçek çökme dökümü biçimi (MiniDumpWriteDump ile oluşturulan) için destek olup olmadığını gerçekten söyleyemem. Bu durumda GDB tarafından hangi formatın beklenebileceğine emin olun.

BTW: Windows XP veya üstünü kullanıyorsanız ve bu gerçeği temel alıyorsanız, çökme dökümü yazmayı hazırlamak için SetUnhandledExceptionFilter yerine AddVectoredExceptionHandler kullanın.

+0

Detaylı cevabınız için teşekkürler. Kilitlenme raporunu ayarlamak, bahsettiğiniz işlevleri kullanarak önemsizdi. Ve GDB, beklenecek olan MiniDumpWriteDump ile oluşturulan dökümü tanımıyor. Hata ayıklama biçimleri, burada aynı sorun olan diğer kişilerin tatmin edici yanıtlar bulmadığını görerek, asıl mesele olarak görünmektedir. Şimdi en azından bir yığın izi alabilirim (tüm işlev isimleri görünmediği için - ilgilenenler, sorularımdaki bağlantıya bakın) ve uygulamayı incelikle sonlandırıyorum. –