关于c ++:在用户(std :: exception)上使Visual Studio中断例外吗?

Make Visual Studio break on User (std::exception) Exceptions?

我的代码会引发未处理的异常,但Visual Studio中的调试器只会破坏系统引发的异常。

例如,在EDOCX1的返回值(0)以下不是零,应该首先抛出我的异常——实际上,如果我在第171行放置一个断点,它会被命中——但是调试器只在调用socket时中断。

我知道我必须明确地添加我自己的类型,或者在Exception Settings中检查All C++ Exceptions not in this list,但这是我要丢弃的std::exception,并且检查std::exception

如何使Visual Studio调试器在出现异常时自动中断?

enter image description here


调试程序在抛出时已中断,但您没有显示调用堆栈中实际引发异常的最顶层函数。

您所展示的是一个更深入堆栈的函数。这表明,当当前被调用的函数返回下一行要执行的是socket(...)行。这就是为什么这一行的图标是绿色的"返回"图标,而不是黄色的"执行当前在这里"图标。

右键单击调用堆栈,单击"显示外部代码",您将看到如下内容:

1
2
3
4
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++,但是抛出异常是一种需要复杂代码的机制,所以它是这样发生的。