C++ 是否在用户(std::exception)异常时使Visual Studio中断?
我的代码抛出未处理的异常,但VisualStudio中的调试器只会中断系统抛出的异常 例如,下面的C++ 是否在用户(std::exception)异常时使Visual Studio中断?,c++,exception-handling,visual-studio-2017,visual-studio-debugging,C++,Exception Handling,Visual Studio 2017,Visual Studio Debugging,我的代码抛出未处理的异常,但VisualStudio中的调试器只会中断系统抛出的异常 例如,下面的getaddrinfo的返回值不是零,应该首先抛出我的异常-事实上,如果我在第171行放置断点,它会被命中-但是调试器只在调用socket时中断 我知道,在Exception Settings中,但这是我正在抛出的std::Exception,并且选中了std::Exception 如何使Visual Studio调试器在出现异常时自动中断? 调试器在抛出时已中断,但您没有显示调用堆栈中实际引发异常
getaddrinfo
的返回值不是零,应该首先抛出我的异常-事实上,如果我在第171行放置断点,它会被命中-但是调试器只在调用socket
时中断
我知道,在Exception Settings
中,但这是我正在抛出的std::Exception
,并且选中了std::Exception
如何使Visual Studio调试器在出现异常时自动中断?
调试器在抛出时已中断,但您没有显示调用堆栈中实际引发异常的最顶层函数 您所展示的是堆栈下的一个函数。这表明,当当前调用的函数返回下一行时,要执行的是
socket(…)
行。这就是为什么该行上的图标是绿色的“返回”图标,而不是黄色的“执行当前在此处”图标
右键单击调用堆栈,单击“显示外部代码”,您将看到如下内容:
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++
请注意,它是KernelBase.dll!RaiseException
实际从中引发异常的位置
是的,我可以同意这不是非常类似C++,但是抛出异常是一种需要复杂代码的机制,所以它会发生这样的情况。