在调试模式下运行此代码时会出现非常方便的事情:
std::array<int, 2> test;
test[5] = 123;
当我点击断言消息框中的“重试”按钮时,Visual Studio 2015将显示test[5] = 123;
行。我不知道为什么它不会破坏运营商内部的断言位置。
有人对此有解释吗?有没有办法可以在我自己的代码中复制相同的行为?
编辑:
为清楚起见,Visual Studio STL在调试模式(_ITERATOR_DEBUG_LEVEL)中绑定检查operator[]
,并且我在调试模式下运行。这里的问题是为什么它在这个位置断开而不是在实际触发断言的运算符内部。
另请注意,使用Visual Studio 2013时,它会在运营商内部中断,因此2015年和2013年之间的行为存在差异,情节会变粗。
答案 0 :(得分:3)
对于Visual Studio 2015,调试器确定哪些函数不是“我的代码”并进行自定义的过程记录在案:
您可以通过在
*.natjmc
个文件中指定模块,源文件和函数来指定调用堆栈中的非用户代码。