5

Kodum işlenmeyen özel durumları atar, ancak Visual Studio'daki hata ayıklayıcı yalnızca sistem tarafından atılanları bozar.Kullanıcı üzerinde Visual Studio kesmesi yap (std :: exception) İstisnalar?

Örneğin, aşağıda getaddrinfo dönüş değeri sıfır değildir ve benim istisna ilk atılmalı - aslında ben hattı 171 bir kesme noktası yerleştirirseniz, o isabet - henüz ayıklayıcı sadece socket için çağrı keser .

ben Exception Settings yılında, I have to add my own types explicitly, or else check All C++ Exceptions not in this list biliyorum, ama bu ben atma ediyorum bir std::exception ve std::exception kontrol olduğunu.

Visual Studio hata ayıklayıcısını özel durumlarıma göre nasıl otomatik olarak keserim?

enter image description here

cevap

3

ayıklayıcı atışta kırıldı ama aslında istisna yükselttiğini çağrı yığını üstteki işlevini gösterilmiyor.

Gösterdiğiniz şey yığınının aşağısında bulunan bir işlevdir. Ve bu şudur ki şu anda çağrılan işlev, çalıştırılacak bir sonraki satırı döndürdüğünde socket(...) satırıdır. Bu yüzden bu satırdaki simge yeşil 'dönüş' simgesidir ve sarı 'yürütme şu anda burada' simgesi değildir.

Sağ, çağrı yığını tıklayın 'şov harici kod' tıklayın ve benzeri bir şey görürsünüz:

KernelBase.dll!RaiseException(unsigned long dwExceptionCode, unsigned long dwExceptionFlags, unsigned long nNumberOfArguments, const unsigned long * lpArguments) Line 904 C 
vcruntime140d.dll!_CxxThrowException(void * pExceptionObject, const _s__ThrowInfo * pThrowInfo) Line 136 C++ 
ConsoleApplication5.exe!main() Line 6 C++ 
ConsoleApplication5.exe!invoke_main() Line 64 C++ 

Not ki onun istisna aslında atılan ediliyor KernelBase.dll!RaiseException.

Evet, bunun çok C++ gibi olmadığını kabul edebilirim, ancak istisnalar atmak karmaşık kod gerektiren bir mekanizmadır ve bu şekilde gerçekleşir.

+0

Görüyorum, teşekkürler Mike! – sebf