2011-07-06 27 views
6

Normalde işlenmemiş olarak bırakılır ve hata ayıklayıcı (gdb, Eclipse CDT) çağrı yığınını gösterir. Maalesef kod, tüm istisnaları emen bir üçüncü parti kütüphanesi tarafından çağrılmaktadır. Üçüncü parti kütüphanesinden önce istisnayı yakalayabilirim, ancak çağrı yığınını göremiyorum (yığın-çözme?).std :: out_of_range öğesinin std :: vector.at() tarafından nereye getirildiğini bulma.

Kural dışı durumun nereye atılacağını nasıl anlarım?

cevap

5

catchpoints Yardımcı olur mu? Gdb'de catch throw komutunu girerek bir istisna her ne zaman kırılabilirsiniz. Eclipse'de bunu gdb konsolu üzerinden yapabilirsiniz. Bakınız this question.

+0

Olumlu teşekkürler! Evet, bu özel durumda yardımcı oldular :) Ama gelecek için: istisna tipine göre filtreleyebilir miyim? Üçüncü taraf kitaplığı, akış denetimi için istisnalar kullanır ... böylece atılan istisnalar hakkında çok fazla bildirim alırdım. – Ali

+0

@Ali: Üzgünüz, bildiğim linkte. Bununla gerçek bir deneyimim yok. Özel durum türünü belirtmenin bir yolu görmüyorum. –

+1

Cevabınızı kabul etmek istiyorum ama lütfen genel seyirci için ne yapması gerektiğini (gdb konsolunda yakalama atma yazın) ve bu bağlantıyı ekleyin: http://stackoverflow.com/q/1109922/341970 – Ali

4

Kural dışı durum nesnesi için kurucuya bir kesme noktası yerleştirebilirsiniz. Bu durum istisna oluşmadan önce gerçekleştiğinden, çağrı koduna büyük görünürlük elde edersiniz.

+0

Alınan ve teşekkürler! Bununla birlikte, gdb catch atma çözümüyle istisnaları filtreleyemiyorum, ancak out_of_range'ın atıldığı bir breakpoint koymak problemi çözüyor. – Ali