C++ istisnaları, Java istisnalarından tamamen farklıdır.
C++ tamamen keyfidir ve ne() tarafından döndürülen dize uygulama tanımlı belirtir:
virtual const char* what() const noexcept;
Returns: An implementation-defined ntbs.
Remarks: The message may be a null-terminated multibyte string
(17.5.2.1.4.2), suitable for conversion
and display as a wstring (21.3, 22.4.1.4). The return value remains
valid until the exception object
from which it is obtained is destroyed or a non-const member
function of the exception object is called.
alıyoruz dönüş değeri, "std :: istisna" mükemmel uyumludur C++ standardı.
Java'nın yaptığı gibi, onları yakaladıktan sonra nereye atıldığını tam olarak bildirmek için C++ istisnalarına güvenmeyin. Bu, C++ standardının kapsamı dışındadır. C++ 'da, bir istisna, yürütme kontrol akışını aktarmak için bir mekanizmadan başka bir şey değildir.
Bunu söyledikten sonra: Birçok C++ uygulaması, geçerli yığın backtrace'ini dökümlemek için bazı uygulamalara özgü mekanizmalar sunacaktır, çalışma zamanı kitaplığının yeteneklerinin en iyisine. Daha fazla bilgi için C++ derleyicinizin belgelerine bakın. Gk, örneğin, backtrace() tarafından döndürülen işlenmemiş adresleri sembollere dönüştürmek için bazı gcc dahili işlevleriyle birlikte backtrace() işlevini ve sembolleri deşifre etmek için diğer işlevleri sunar. Bunu kullanarak, Java'nın istisna işleme için kaba bir analog düzenlenebilir; gcc'nin uygulaması mükemmel olmamasına ve bazı işlevsel deliklere sahip olmasına ve aynı zamanda peşin planlamayı ve kurucuların geçerli yığın çerçevesini yakaladığı özel istisna sınıfları gerektirmesine rağmen (istisnanın gerçekte atılmasına neden olur); ve yakalandıktan sonra, atılan istisna sınıfı örneği yakalanan backtrace bilgisi için incelenebilir.
Fakat bu durum şu anki durumunuza gerçekten yardımcı olmuyor. Önerdiğim gibi C++ derleyicinizin belgelerini kontrol etmenizi ve hata ayıklayıcınızın özelliklerini araştırmanızı öneririm. Bir C++ hata ayıklayıcısı, herhangi bir özel durum atıldığında ve yakalanmadan önce bir kesme noktası ayarlamanıza izin vermelidir, böylece istisna oluştuğunda, hata ayıklayıcı aracılığıyla yığın backtrace'i inceleyebilirsiniz.
Gdb'ye yükleyebileceğiniz bir çekirdek dökümü alıp bir backtrace açın mı? –
Özel durum nasıl atılır? Nasıl atılır? Hangi istisna atılır? Lütfen [Minimal, Tam ve Doğrulanabilir Örnek] (http://stackoverflow.com/help/mcve) oluşturun ve bize gösterin. –
Bir GCC kitaplığı istisnasının olağandışı görünmesi - std :: runtime_error, std :: length_error vb. Gibi daha özel türetilmiş bir sınıf olmasını beklerim (bunlardan biri (http: //en.cppreference). com/w/cpp/error/exception)) ile .what() 'iletir. Bunun muhtemelen kendi kod tabanından olduğunu düşünüyorum. yardımcı olmayabilir, ama ben olsaydı ben \ kendi kodunda + std :: exception'' s ve bu bir şey gitmezse eğer GCC deneyebilirsiniz atmak ' 'bir tekrarlı grep çalışacaktı ediyorum başlıkları. –