C++ visualc&x2B+;在返回位置断言中断

C++ visualc&x2B+;在返回位置断言中断,c++,visual-studio,C++,Visual Studio,在调试模式下运行此代码时,会发生一些非常方便的事情: std::array<int, 2> test; test[5] = 123; std::阵列测试; 试验[5]=123; 当我点击断言消息框上的“重试”按钮时,Visual Studio 2015将显示test[5]=123行。我不知道为什么它没有在操作符内部的断言位置中断 有人对此有解释吗?有没有办法在自己的代码中复制相同的行为 编辑: 为了清楚起见,VisualStudioSTL在调试模式(_ITERATOR_Debug

在调试模式下运行此代码时,会发生一些非常方便的事情:

std::array<int, 2> test;
test[5] = 123;
std::阵列测试;
试验[5]=123;
当我点击断言消息框上的“重试”按钮时,Visual Studio 2015将显示
test[5]=123行。我不知道为什么它没有在操作符内部的断言位置中断

有人对此有解释吗?有没有办法在自己的代码中复制相同的行为

编辑:

为了清楚起见,VisualStudioSTL在调试模式(_ITERATOR_Debug_LEVEL)下对
操作符[]
执行边界检查,我正在调试模式下运行。这里的问题是为什么它在这个位置中断,而不是在实际触发断言的操作符内部


还请注意,对于Visual Studio 2013,它在操作符内部中断,因此2015年和2013年之间的行为有所不同,绘图变厚。

对于Visual Studio 2015,调试器确定哪些函数不是“我的代码”的过程,并记录了自定义:

通过在
*.natjmc
文件中指定模块、源文件和函数,可以在调用堆栈中将它们指定为非用户代码


确切地说,是哪个版本的Visual Studio以及哪个编译器和链接器设置?我无法重现这种行为。当我按照你的建议去做时,我进入了
stddthrow.cpp
,第15行,
:\u crtdbgbbreak()。调用堆栈中的下一项位于
操作符[]
的第149行的文件
数组中。。。它可能在assert调用时中断,但将调试器的焦点放在调用堆栈中的另一个帧上。工具->选项->调试器->启用“仅我的代码”等选项会影响此焦点。@BenVoigt:我认为该选项仅与“单步执行”操作相关。当点击
CrtDbgBreak()
时,它似乎不会影响调试器焦点,至少在Visual Studio 2013中不会。好的评论@ChristianHackl,行为与VS 2013不同,此版本的调试器会在操作符内部中断。@Dralmer:也许问题是这是一个错误还是一个功能…:)