2015-04-23 28 views
10

Eklediğim daha büyük bir sayısal programda hata ayıklama yapıyorum. Fortran90'da gfortran (Mac için en yeni sürüm) ile derlenmiş ve gdb (Mac için mevcut en yeni sürüm) kullanarak hata ayıklama yapıyorum.gdb ve gfortran ile hata ayıklama - FPE'nin

Eklerimin bir yerinde bir hata var ve onu bulmaya çalışıyorum, bu da programın çalıştırılmasının beklenen sonucu üretmediğinden emin.

Note: The following floating-point exceptions are signalling: IEEE_INVALID_FLAG IEEE_DIVIDE_BY_ZERO IEEE_UNDERFLOW_FLAG IEEE_DENORMAL [Inferior 1 (process 83843) exited normally]

Ben bu FPE oluşur tam nerede tanımlamak istiyorum, ama bir kayan nokta özel neden olmaz gibi görünüyor: Ben gdb çalıştırdığınızda, ben sonuna aşağıdaki çıktıyı almak program çökmesine. Bunu kodumda 0'a göre açıkça bölerek test ettim - programın çalışmayı durdurmasına neden olmadı, ancak beklenmedik davranışlara yol açtı.

Gdb veya gfortran için programın, kayan nokta istisnasına ulaştığında (ideal olarak backtrace ile) çalışmayı durdurmasını sağlamak için uygun bayrağı nedir? here numaralı yönergeleri izlemeyi denedim, ancak hiçbir şey değişmiyordu. gfortran manuel derleyici bayrakları için

gfortran -g -fbacktrace -ffpe-trap=zero,overflow,underflow youcode.f90 -o run.exe 



Açıklama:

+1

vardır derleyici bayrakları https://stackoverflow.com/questions/10210759/gfortran-warn-on-floating belirtilen yardımcı olabilecek bir nokta-istisna. Bununla birlikte, sorudaki sürüm numaralarından bahseder misiniz? "Son", gelecekte okuyucular için daha az kullanılacaktır. – francescalus

cevap

11

Muhtemelen kodunuzu derlerken bu bayrakları eklemeniz gerekir

-g  

ayıklama verileri içerecek şekilde

-fbacktrace 

Bunu belirtin, ne zaman çalışma zamanı hatasıyla karşılaşılır veya ölümcül bir sinyal verilir (segmentasyon hatası, yasadışı yönerge, veriyolu hatası veya kayan nokta istisnası), Fortran çalışma zamanı kitaplığı hataya ilişkin bir backtrace vermelidir. Bu seçenek sadece Fortran ana programının derlenmesi için etkilidir. Bir Yüzen Nokta İstisna (FPE) yükseltilmelidir zaman

-ffpe-trap=list 

IEEE istisnalar listesi belirleyin. Çoğu sistemde bu, SIGFPE sinyalinin gönderilmesine ve programın kesintiye uğramasına neden olacak ve hata ayıklama için yararlı bir çekirdek dosyası üretecektir. listesi, aşağıdaki IEEE istisnalarının virgülle ayrılmış bir listesidir: 'geçersiz' (SQRT (-1.0) gibi geçersiz kayan nokta işlemi, zero (sıfıra bölme), overflow (kayan bir taşma) nokta işlemi), underflow (kayan nokta işleminde yetersizlik), precision (çalışma sırasında hassasiyet kaybı) ve denormal (işlem, bir denormal değer üretti). Fortran çalışma zamanı kitaplığındaki "CPU_TIME" gibi bazı yordamların, ffpe-trap = kesinlik kullanıldığında kayan nokta istisnalarını tetiklemesi olasıdır. Bu nedenle, ffpe-trap = hassasiyet kullanımı önerilmez.

fazla bilgi için bu iki yerde bir göz atın:

https://gcc.gnu.org/onlinedocs/gcc-4.3.2/gfortran.pdf http://faculty.washington.edu/rjl/uwamath583s11/sphinx/notes/html/gfortran_flags.html

+0

Çok teşekkürler dostum. –

İlgili konular